Portál AbcLinuxu, 20. dubna 2024 05:59


Dotaz: pomoc pri query

23.5.2008 14:36 peter
pomoc pri query
Přečteno: 470×
Odpovědět | Admin
Ahoj, mam nasledujuci problem, mam tabulku z PK id, textom, datumom. z tejto tabulky vytahujem id zgrupene podla rovnakeho textu, no problem je v tom, ze mi to da vzdy prve id z tych ktore maju rovnaky text, ja chcem aby mi dalo id najnovsieho datumu s tych ktore som zgrupil. qwery vypada zatial takto

SELECT id FROM tabulka WHERE GROUP BY text

Za pomoc vopred dakujem.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jakub Hájek avatar 23.5.2008 14:40 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: pomoc pri query
Odpovědět | | Sbalit | Link | Blokovat | Admin
To WHERE tam nepatri.

SELECT id FROM tabulka GROUP BY text
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
23.5.2008 14:44 peter
Rozbalit Rozbalit vše Re: pomoc pri query
Odpovědět | | Sbalit | Link | Blokovat | Admin
ano , to som sa zmylil :-)
Jakub Hájek avatar 23.5.2008 15:17 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: pomoc pri query
A uz to funguje? nebo je chyba jinde?
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
23.5.2008 15:44 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: pomoc pri query
Odpovědět | | Sbalit | Link | Blokovat | Admin
Musíte použít vnořený dotaz. V dotazu, kde je GROUP BY, můžete použít v části SELECT jenom ty sloupce, které jsou v GROUP BY. Kdybyste nepoužíval MySQL, databáze by vám rovnou vynadala – MySQL (nějak) vybere jedno id ze seznamu, která patří do jedné skupiny, a to vám vrátí.
19.8.2008 22:48 MaZ
Rozbalit Rozbalit vše Re: pomoc pri query
Odpovědět | | Sbalit | Link | Blokovat | Admin
create table tabulka (id int4, text varchar(100), datum date);

insert into tabulka(id, text, datum) values (1, 'text1', '20080101');
insert into tabulka(id, text, datum) values (2, 'text1', '20080105');
insert into tabulka(id, text, datum) values (3, 'text1', '20080103');
insert into tabulka(id, text, datum) values (4, 'text2', '20080109');
insert into tabulka(id, text, datum) values (5, 'text2', '20080108');

select text, id
from tabulka t 
where datum = (select max(datum) from tabulka t2 where t2.text=t.text)
v Oracle i takhle
create table tabulka (id integer, text varchar2(100), datum date);
-- ....
SELECT t.text, t.id
FROM (
	SELECT text, id, rank () over (partition by text order by datum desc) poradi
	from tabulka
     ) t
WHERE poradi = 1
vysledek
text1	2
text2	4
21.8.2008 08:37 FooBar
Rozbalit Rozbalit vše Re: pomoc pri query
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nezminils co je to za RDBMS (z cehoz usuzuju, ze MySQL;) )... pomerne elegantne tohle resi postgres, kde muzes udelat neco jako (po pameti)...

SELECT DISTINCT ON(text) * FROM tabulka ORDER BY date DESC
22.8.2008 12:45 fanda
Rozbalit Rozbalit vše Re: pomoc pri query
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud platí, že čím novější datum (příspěvek) tím vyšší ID, šlo by použít toto: SELECT max(id) FROM tabulka GROUP BY text

Jinak vnořený dotaz viz. výše.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.