Maximální záznamy v group skupině

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sejmor
Člen | 63
+
0
-

Zdravím všechny,

Mám jeden stupid dotaz – asi to tu bylo, ale nemůžu to najít. Abych to zjednodušil mám hromadu dat a potřebuju je seskupit podle jednoho sloupce ale abych měl ve výsledném záznamu nejvyšší hodnotu té dané skupiny např. podle data. a hlavně jeho další sloupce. V klasickém SQL se dělají 2 selecty, které se spojí JOINEM.

Převedeno na používané knihy: Mám tabulku knihy, která má sloupce autor_id, datum_vydani, jmeno. A já potřebuji vypsat všechny poslední knihy jednotlivých autorů.

KLASIK SQL:

select * from knihy JOIN (select autor_id, max(datum_vydani) as maxdatum from knihy GROUP BY autor_id) as nejvyssi ON knihy.datum_vydani=nejvyssi.maxdatum AND knihy.autor_id=nejvyssi.autor_id

V Nette DB by mě lákalo (Mám nette 2.018)

$book->group('author','MAX('datum_vydani'))

Ale to fungovat nebude

Jak na to ? Ťukněte mi prosím někdo :)

CZechBoY
Člen | 3608
+
+1
-

Jediný co mě napadlo tak je hack, co občas používám, abych dostal „celej“ sql dotaz do hlavního dotazu.

SELECT *
FROM kniha
HAVING datum_vydani = (
   SELECT MAX(datum_vydani)
   FROM kniha k2
   WHERE k2.autor_id = kniha.autor_id
);
$db->db->table('kniha')
            ->having('datum_vydani = (SELECT MAX(datum_vydani) FROM kniha `k2` WHERE `k2`.autor_id = kniha.autor_id)');

Editoval CZechBoY (1. 11. 2015 12:02)

sejmor
Člen | 63
+
0
-

Super

Tuhle konstrukci jsem neznal. Měl jsem to prozatím přes přímý query ale tam pak nefunguje v šabloně vazba na cizí klíče. Takhle to jde.

Díky moc