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:
1select user_id, max(arrival) as arrival, max(date) as date from attendance group by user_id, date
2inner join 
3select max(date) as date, user_id from attendance groupe by user_id 
4using (user_id, date)
select user_id, max(arrival) as arrival, max(dateas date from attendance group by user_id, date
inner join 
select max(dateas 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:

1select user_id, max(arrival) as arrival, max(date) as date from attendance group by user_id, date
2inner join 
3(select max(date) as date, user_id from attendance group by user_id) x
4using (user_id, date)
select user_id, max(arrival) as arrival, max(dateas date from attendance group by user_id, date
inner join 
(select max(dateas 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.

1SELECR * FROM
2(select user_id, max(arrival) as arrival, max(date) as date from attendance group by user_id, date) x
3inner join 
4(select max(date) as date, user_id from attendance group by user_id) y
5using (user_id, date)
SELECR * FROM
(select user_id, max(arrival) as arrival, max(dateas date from attendance group by user_id, date) x
inner join 
(select max(dateas 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
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
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.
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.

Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:


Běda vám, jestli to bude blábol.

0