Select: hodnoty mladší než datum

Select: hodnoty mladší než datum
« kdy: 03. 11. 2011, 16:27:46 »
Zdravím,
předem se omlouvám za zavádějící předmět, ale líp to popsat par slovy neumim :D
Situace je následovná: mám databázi se dvěma tabulkami:
projekt - pid, nazev
prace - id, pid, jmeno, datum

pid je identifikátor projektu, zbytek je snad jasny.
Každá práce náleží nějakému projektu a projekt může mít více prací.
A teď samotná otázka:
Jak napsat select, který vrátí všechny projekty, jejichž poslední práce je mladší než nějaké datum?

Lámu hlavu si s tím hlavu ale ne a ne na nic přijít. Předem díky za jakoukoli radu.
S pozdravem Jirka
« Poslední změna: 03. 11. 2011, 16:54:03 od Petr Krčmář »


to je jedno

Re: select projektu s datem mladsim nez hodnota
« Odpověď #1 kdy: 03. 11. 2011, 16:42:15 »
- co jsi treba uz vyzkousel a nezafungovalo?
- http://www.linuxsoft.cz/article.php?id_article=837

PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: select projektu s datem mladsim nez hodnota
« Odpověď #2 kdy: 03. 11. 2011, 16:56:36 »
Malo by to imho byt nieco na styl

SELECT `project`.* FROM `prace`
LEFT JOIN `projekt` ON `prace`.`pid` = `projekt`.`pid`
WHERE `prace`.`datum` < 'hodnota'


Re: Select: hodnoty mladší než datum
« Odpověď #3 kdy: 03. 11. 2011, 17:38:12 »
Malo by to imho byt nieco na styl

SELECT `project`.* FROM `prace`
LEFT JOIN `projekt` ON `prace`.`pid` = `projekt`.`pid`
WHERE `prace`.`datum` < 'hodnota'




tady ovšem narazím na to, že potřebuji v klauzuli where pouze nejstarší práci daného projektu a ne všechny

PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: Select: hodnoty mladší než datum
« Odpověď #4 kdy: 03. 11. 2011, 17:42:38 »
OMG... LIMIT 0, 1


PCnity

  • *****
  • 685
    • Zobrazit profil
    • E-mail
Re: Select: hodnoty mladší než datum
« Odpověď #5 kdy: 03. 11. 2011, 17:44:07 »
Hovadina... Ty predsa vobec nemas zaujem o pracu. Sa cely cas pytas len na projekt!
Cize ziaden limit, ale SELECT DISTINCT.

Re: Select: hodnoty mladší než datum
« Odpověď #6 kdy: 03. 11. 2011, 17:52:07 »
díky všem nakonec byla odpovědí akregační fce max

KapitánRUM

Re: Select: hodnoty mladší než datum
« Odpověď #7 kdy: 03. 11. 2011, 21:18:11 »
Trochu chytřejší člověk by mohl postnout ten finální SELECT, aby ten, který to bude hledat po tobě, našel nějaké řešení. Ale to by jeden chtěl asi moc co? Myslet i na ostatní a ne jen na svou zadek.

KapitánRUM (Někdo musí bejt ten zlej!)

Re: Select: hodnoty mladší než datum
« Odpověď #8 kdy: 04. 11. 2011, 10:52:33 »
select pid,max(datum) from test where datum > "2011-11-04" group by pid;

Re: Select: hodnoty mladší než datum
« Odpověď #9 kdy: 04. 11. 2011, 11:02:55 »
Trochu chytřejší člověk by mohl postnout ten finální SELECT, aby ten, který to bude hledat po tobě, našel nějaké řešení. Ale to by jeden chtěl asi moc co? Myslet i na ostatní a ne jen na svou zadek.

KapitánRUM (Někdo musí bejt ten zlej!)

Kdybych myslel jen na svuj zadek tak jsem nepostnu ani ten max. Pro zajemce, tady je reseni i s vysevetlenim: http://www.linuxsoft.cz/article.php?id_article=901

Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re: Select: hodnoty mladší než datum
« Odpověď #10 kdy: 04. 11. 2011, 14:54:54 »
Jenže to je špatně, protože pokud má někdo dvě práce se stejným časem, vrátí to obě, takže se Ti tam budou duplikovat řádky. Pokud teda chceš vypsat i danou práci, todle řešení nejde použít. V tom případě by bylo dobrým řešením použití window functions
Kód: [Vybrat]
WHERE row_number() = 1 OVER ( PARTITION BY project_id ORDER BY datum) AND Datum > ... Je teda pravda, že na to bys nemoh dělat v mysql, ta to neumí.

Pokud danou práci nepotřebuješ, pak je zas takovýdle vnořování selectů pomalý a drahý, naprosto dostačuje
Kód: [Vybrat]
SELECT .... INNER JOIN .... GROUP BY .... HAVING MAX(DATUM) > ....