Autor Zpráva
Camo
Profil
Brý večir všetkým,
a prosím vás vie mi niekto vysvetliť prečo mi tento join v posgresql hádže chybu:
select user_id, max(arrival) as arrival, max(date) as date from attendance group by user_id, date
inner join 
select max(date) as date, user_id from attendance groupe by user_id 
using (user_id, date)
Píše mi ERROR: syntax error at or near "inner"
LINE 4: inner join
Obidva selecty samostatne fungujú. S postgres sa len učím robiť, tak majte zľutovanie.
Ďakujem.
juriad
Profil
Tipuji, že chybí závorky kolem joinovaného dotazu a jeho alias. A měl jsi tam překlep:

select user_id, max(arrival) as arrival, max(date) as date from attendance group by user_id, date
inner join 
(select max(date) as date, user_id from attendance group by user_id) x
using (user_id, date)
Camo
Profil
juriad:
Zátvorky aj alias som skúšal, tie to niesú.
juriad
Profil
Aha, máš join až za gpoup by.

SELECR * FROM
(select user_id, max(arrival) as arrival, max(date) as date from attendance group by user_id, date) x
inner join 
(select max(date) as date, user_id from attendance group by user_id) y
using (user_id, date)

Ale ten dotaz by nejspíš šel napsat lépe. Chceš pro každého uživatele a jeho poslední zaznamenaný den informaci o maximálním arrival v daném dnu?
Camo
Profil
juriad:
Díky, funguje.
A áno presne to chcem, dokonca potrebujem len ten posledný deň pre každého usera, ale nič lepšie ma nenapadá.
Máš nejaký nápad
Kajman
Profil
select distinct on (user_id) user_id, date
from   attendance
order  by user_id, date desc
Camo
Profil
Kajman:
Priznávam že tomu zápisu nerozumiem.
Kajman
Profil
Ani po nastudování manuálu odkázaného z toho kódu?
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-DISTINCT

Pokud chcete „len ten posledný deň pre každého usera“ tak můžete použít v pgsql ten způsob s distinct on nebo klasicky group by jak v jiných databázích:
select max(date) as date, user_id from attendance group by user_id

Výhoda v distinct on je možnost z toho posledního záznamu získat jednoduše i další sloupce.
Camo
Profil
Kajman:
Ten link som si nevšimol, ale dostanem sa k tomu až časom.
V každom prípade díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: