ďťż
 
[pgsql] jedno zapytanie? ďťż
 
[pgsql] jedno zapytanie?
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

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com