GROUP BY vicenasobne grupovani – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

GROUP BY vicenasobne grupovani – MySQL – Fórum – Programujte.comGROUP BY vicenasobne grupovani – MySQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Row0
Stálý člen
8. 4. 2016   #1
-
0
-

Dobrý den 

Z Následující tabulky potřebuji applicantprofileid z grupovat aby co radek to jedno id a neopakovalose k tomu nejvyssi responsedate a dle toho jaky responsedate to byl priradit ze stejneho radku jako responsdate announcementid

Připojen obrázek.

Nějaké nápady? :)

Nahlásit jako SPAM
IP: 46.13.3.–
Reklama
Reklama
ctverec
~ Anonymní uživatel
15 příspěvků
9. 4. 2016   #2
-
+1
-
Zajímavé
Row +

Může být nějak takto


SELECT a.applicantprofileid, max(a.responsedate),
(select first 1 a2.announcementid from PARAMVALUE a2 where a2.applicantprofileid = a.applicantprofileid and
a2.responsedate = max(a.responsedate))
FROM NEZNAMATABULKA a
where a.applicantprofileid in (1,2,3)
group by a.applicantprofileid;


To first 1 je tam proto, že ten záznam je nejednoznačný, pokud existuje více takových záznamů (pokud syntaxe vašeho SQL nepodporuje first, tak můžete dát třeba max())
 

Nahlásit jako SPAM
IP: 89.177.134.–
Řešení
ctverec
~ Anonymní uživatel
15 příspěvků
9. 4. 2016   #3
-
+1
-
Zajímavé
Row +
Vyřešeno Nejlepší odpověď

Omlouvám se, byly tam nějaké zbytky z mého experimentu. Tak ještě jednou, teď i s tím max místo first (může tam být i třeba min, to záleží..):

SELECT a.applicantprofileid, max(a.responsedate),
(select max(a2.announcementid) from NEZNAMATABULKA a2 where a2.applicantprofileid = a.applicantprofileid and
a2.responsedate = max(a.responsedate))
FROM NEZNAMATABULKA a
group by a.applicantprofileid;

Nahlásit jako SPAM
IP: 89.177.134.–
Row0
Stálý člen
10. 4. 2016   #4
-
0
-

#3 ctverec
Tohle je přesně ono!! Díky moc...Můžu se jenom zeptat jak jsi na to myšlenkově přišel? Nebo je to tím , že jsi to už řešil dříve? Díky moc!!

Nahlásit jako SPAM
IP: 176.101.146.–
ctverec
~ Anonymní uživatel
15 příspěvků
10. 4. 2016   #5
-
+1
-
Zajímavé
Row +

Řešení je logická úvaha o třech krocích:

1. Části zadání "Z Následující tabulky potřebuji applicantprofileid z grupovat aby co radek to jedno id a neopakovalose" odpovídá řešení

SELECT a.applicantprofileid
FROM NEZNAMATABULKA a
group by a.applicantprofileid;

2. část "k tomu nejvyssi responsedate" původní řešení rozšírí o druhé pole
 
SELECT a.applicantprofileid, max(a.responsedate)
 FROM NEZNAMATABULKA a
 group by a.applicantprofileid;

3. a poslední část zadání "a dle toho jaky responsedate to byl priradit ze stejneho radku jako responsdate announcementid" rozšíří řešení o třetí pole, jehož hodnotu je potřeba nějak získat. Bylo by krásné, kdyby SELECT uměl optimalizační zkratku "našel-li jsi max(a.responsedate), tak k němu přiřaď jeho announcementid". Ale bohužel neumí. Takže je potřeba tuto hodnotu znovu nalézt kompletním separátním selectem

(select max(a2.announcementid) from NEZNAMATABULKA a2 where a2.applicantprofileid = a.applicantprofileid and a2.responsedate = max(a.responsedate))
 
Syntaxe SQL má svou krásu a eleganci, ale bohužel také své limity.
 

Nahlásit jako SPAM
IP: 89.177.134.–
Row0
Stálý člen
10. 4. 2016   #6
-
0
-

#5 ctverec
Díky za ochotu :) a za vysvětlení :)

Nahlásit jako SPAM
IP: 176.101.146.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

GROUP BY vs. ORDER BY — založil tobik

Počet položek v GROUP BY — založil Kall_Ell

Použití "Group by" ve "view" — založil RomanNTA

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý