ďťż
 
postgres, ostatnia data dla kilku id. ďťż
 
postgres, ostatnia data dla kilku id.
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

postgres, ostatnia data dla kilku id.



mhyjek - 14-12-2006 16:08
postgres, ostatnia data dla kilku id.
  tabela nazwijmy ja >tabela< wyglada tak:
id | date | time
1 | 06-11-25 | 12:00:25
1 | 06-11-25 | 13:00:25
2 | 06-11-25 | 11:00:25
3 | 06-11-25 | 12:01:50
3 | 06-11-25 | 12:01:53

chce z tej tabeli wybrac po jednym najstarszym rekordzie dla id = 1 i
2.
oczywiscie chcialbym to jakos jednym zapytaniem jesli to mozliwe
pojazdow do wyboru bedzie wicej to jest tylko przyklad
wyszedlem od takiego zapisu ale rzecz jasna nie dziala on prawidlowo i
utknalem
i skonczyly mi sie pomysly. w ogole nie wiem czy jest to do zrobienia
jednym zapytaniem

select * from tabela
where vehicle_id = ANY (ARRAY[1,2])
order by "date" desc, "time" desc
limit 1;





Andrzej Kosmala - 14-12-2006 16:08

 
U?ytkownik "mhyjek" <mhyjek@motronik.com.pl> napisa? w wiadomo?ci
news:1164626021.716356.279240@f16g2000cwb.googlegr oups.com...
> tabela nazwijmy ja >tabela< wyglada tak:
> id | date | time
> 1 | 06-11-25 | 12:00:25
> 1 | 06-11-25 | 13:00:25
> 2 | 06-11-25 | 11:00:25
> 3 | 06-11-25 | 12:01:50
> 3 | 06-11-25 | 12:01:53
>
> chce z tej tabeli wybrac po jednym najstarszym rekordzie dla id = 1 i
> 2.
> oczywiscie chcialbym to jakos jednym zapytaniem jesli to mozliwe
> pojazdow do wyboru bedzie wicej to jest tylko przyklad
> wyszedlem od takiego zapisu ale rzecz jasna nie dziala on prawidlowo i
> utknalem
> i skonczyly mi sie pomysly. w ogole nie wiem czy jest to do zrobienia
> jednym zapytaniem
>
> select * from tabela
> where vehicle_id = ANY (ARRAY[1,2])
> order by "date" desc, "time" desc
> limit 1;

SELECT id,min(date+time)
FROM tabela
GROUP BY id
WHERE id IN (1,2);

--

Pozdrawiam,
Andrzej Kosmala




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 14-12-2006 16:08

  mhyjek wrote:
> tabela nazwijmy ja >tabela< wyglada tak:
> id | date | time
> 1 | 06-11-25 | 12:00:25
> 1 | 06-11-25 | 13:00:25
> 2 | 06-11-25 | 11:00:25
> 3 | 06-11-25 | 12:01:50
> 3 | 06-11-25 | 12:01:53
>
> chce z tej tabeli wybrac po jednym najstarszym rekordzie dla id = 1 i
> 2.
> oczywiscie chcialbym to jakos jednym zapytaniem jesli to mozliwe
> pojazdow do wyboru bedzie wicej to jest tylko przyklad
> wyszedlem od takiego zapisu ale rzecz jasna nie dziala on prawidlowo i
> utknalem
> i skonczyly mi sie pomysly. w ogole nie wiem czy jest to do zrobienia
> jednym zapytaniem
>
> select * from tabela
> where vehicle_id = ANY (ARRAY[1,2])
> order by "date" desc, "time" desc
> limit 1;

Niepotrzebnie rozbija?e? czas na dat? i godzine.

select * from tab t,
(select p.id,max((p.date || ' ' || p.time)::timestamp) as czas
from tab p
group by id) s
where t.id = s.id and (t.date || ' ' || t.time)::timestamp = s.czas

--
P.M.




hubert depesz lubaczewski - 14-12-2006 16:08

  On 2006-11-27, mhyjek <mhyjek@motronik.com.pl> wrote:
> tabela nazwijmy ja >tabela< wyglada tak:
> id | date | time
> 1 | 06-11-25 | 12:00:25
> 1 | 06-11-25 | 13:00:25
> 2 | 06-11-25 | 11:00:25
> 3 | 06-11-25 | 12:01:50
> 3 | 06-11-25 | 12:01:53
> chce z tej tabeli wybrac po jednym najstarszym rekordzie dla id = 1 i
> 2.
> oczywiscie chcialbym to jakos jednym zapytaniem jesli to mozliwe
> pojazdow do wyboru bedzie wicej to jest tylko przyklad
> wyszedlem od takiego zapisu ale rzecz jasna nie dziala on prawidlowo i
> utknalem
> i skonczyly mi sie pomysly. w ogole nie wiem czy jest to do zrobienia
> jednym zapytaniem
> select * from tabela
> where vehicle_id = ANY (ARRAY[1,2])
> order by "date" desc, "time" desc
> limit 1;

poczytaj o "distinct on".

depesz

--
http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz





mhyjek - 14-12-2006 16:08

  witam.
ostatecznie zapytanie przybralo postac:
SELECT * FROM tabela
WHERE (date+time)
IN(SELECT MAX(date+time) FROM tabela WHERE id IN (1,2) GROUP BY id);

zapytanie zwraca wszsykie kolumny - w odroznieniu do zapytania
proponowanego przez Andrzeja, i jest duzo prostsze od zapytania
proponowanego przez Pawla.
O DISTINCT czytalem i teraz i troche wczesniej ale jakos nie
naprowadzilo mnie to na zaden slad.




Antoni Jakubiak - 14-12-2006 16:08

  mhyjek wrote:
> witam.
> ostatecznie zapytanie przybralo postac:
> SELECT * FROM tabela
> WHERE (date+time)
> IN(SELECT MAX(date+time) FROM tabela WHERE id IN (1,2) GROUP BY id);
>
> zapytanie zwraca wszsykie kolumny - w odroznieniu do zapytania
> proponowanego przez Andrzeja, i jest duzo prostsze od zapytania
> proponowanego przez Pawla.
> O DISTINCT czytalem i teraz i troche wczesniej ale jakos nie
> naprowadzilo mnie to na zaden slad.
>

To zle. PostgreSQL rozszerza standard SQL o pojecie distinct on:

select distinct on ( id )
id, czas
from
tabela
order by
id, czas




hubert depesz lubaczewski - 14-12-2006 16:08

  On 2006-11-27, mhyjek <mhyjek@motronik.com.pl> wrote:
> O DISTINCT czytalem i teraz i troche wczesniej ale jakos nie
> naprowadzilo mnie to na zaden slad.

pisa?em o "DISTINCT ON" a nie o "DISTINCT"!

depesz

--
http://www.depesz.com/ -> nowy, jeszcze lepszy, depesz




A.L.E.C - 14-12-2006 16:08

  mhyjek wrote:
> witam.
> ostatecznie zapytanie przybralo postac:
> SELECT * FROM tabela
> WHERE (date+time)
> IN(SELECT MAX(date+time) FROM tabela WHERE id IN (1,2) GROUP BY id);

O DISTINCT ON ju? dosta?e? info, to ja mo?e odnios? si? do tego
zapytania. Je?li kombinacja date+time nie jest unikalna musisz napisa?:

WHERE id IN (1,2) AND (date+time)
IN(SELECT MAX(date+time) FROM tabela WHERE id IN (1,2) GROUP BY id);

p.s. pewnie poprawi to te? wydajno??

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg-2275252
LAN Management System Developer http://lms.alec.pl




mhyjek - 14-12-2006 16:09

  Ok. Moj blad chodizlo mi oczywiscie o "DISTINCT ON". Wyrazilem sie
nieprecyzyjnie.
Nie wiem tylko dlaczego chociazby najprostsze uzycie tego w mojej
tabeli generowalo
bledy. Dokumentacje przeczytalem dokladnie. Dlatego zapytanie przybralo
postac jak napisalem. Ale peniw powroce do tematu "distinct on". Dodam
tylko ze te trzy pola w przykladzie z pierwszego pola to tylko fragment
calej struktury, w sumie 23 pola.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int [PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?= [postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?= Postgres - replikcja master-master Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= =?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com