[pgsql] jedno zapytanie?
A.L.E.C - 11-07-2007 00:00
[pgsql] jedno zapytanie?
tabela umowy (id, ...) tabela wersje (data, id_umowy, ...)
id_umowy nie jest unikalne, czyli w tabeli wersje może być wiele rekordów dla jednej umowy. Jak wybrać wszystkie najnowsze dane (wszystkie kolumny obu tabel) wszystkich umów? Np.
umowy id, ... 1 2 3
wersje data, id_umowy, ... 2007-01-01 1 2007-01-30 1 2007-02-01 2 2007-01-01 3 2007-03-01 2
wynik
id_umowy, data, .... 1 2007-01-30 2 2007-03-01 3 2007-01-01
kombinuję z order by data desc limit 1, ale nie potrafię połączyć zapytań w jedno, takie coś oczywiście nie działa:
select u.*, (select * from wersje where id_umowy = u.id ... order by data desc limit 1) from umowy u;
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.org.pl
A.L.E.C - 11-07-2007 00:00
A.L.E.C wrote:
> > select u.*, > (select * > from wersje > where id_umowy = u.id ... > order by data desc limit 1) > from umowy u;
w tabeli wersje jest też kolumna id, więc wymyśliłem coś takiego:
select * from umowy u, (select * from wersje a where id IN (select id from wersje b where a.id_umowy = b.id_umowy order by data desc limit 1) ) w where u.id = w.id_umowy
a może da się to zrobić lepiej?
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.org.pl
slawekj - 11-07-2007 00:00
>wynik >id_umowy, data, .... >1 2007-01-30 >2 2007-03-01 >3 2007-01-01
najpierw posortować wg ORDER BY data desc a następnie z tego wyniku wybierać po jednym pierwszym ID czyli niepowtarzalne ID Aby to wykonać powinno wystarczyć połączenie DISTINCT i ORDER BY
pozdr Sławek
hubert depesz lubaczewski - 11-07-2007 00:00
On 2007-07-10, A.L.E.C <alec1@poczta.onet.pl> wrote: > tabela umowy (id, ...) > tabela wersje (data, id_umowy, ...) > > id_umowy nie jest unikalne, czyli w tabeli wersje może być wiele > rekordów dla jednej umowy. Jak wybrać wszystkie najnowsze dane > (wszystkie kolumny obu tabel) wszystkich umów? Np.
select distinct on (u.id) w.data, u.* from umowy u join wersje w on u.id = w.id_umowy order by u.id asc, w.data desc
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
A.L.E.C - 11-07-2007 00:00
hubert depesz lubaczewski wrote:
> select distinct on (u.id) w.data, u.* > from umowy u join wersje w on u.id = w.id_umowy > order by u.id asc, w.data desc >
Dzięki. Zapomniałem o "distinct on", na ciebie jak zwykle można liczyć. Wygląda zdecydowanie lepiej niż moje rozwiązanie z drugiego posta i na oko powinno być szybsze (chwilowo nie mam dużo danych do testów).
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.org.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
[MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?=
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.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 |
|