Prosty Join

0

Cześć

Od kilku wieczorów męczę się z pewnym zapytaniem. Otóż mam dwie tabelki:

files: id, name, extension
oraz
versions id, file_id, size, date

Czy ktoś może mi pomóc w ułożeniu zapytania które wyciągnie wszystkie rekordy z tabeli files i do każdego rekordu dopasuje jeden rekord z versions gdzie date jest najpóźniejsza.

np.

files: id, name, extension
1, plik1 doc
2, plik2 doc

versions id, file_id, size, date
1, 1, 600, 2011-11-09
2, 1, 600, 2011-11-08
3, 2, 800, 2011-10-01
4, 2, 800, 2011-09-01

Otrzymałbym:

1, plik1, doc, 1, 1, 600, 2011-11-09
2, plik2 doc, 3, 2 , 800, 2011-10-01

Dziękuję za pomoc.

Dodam że korzystam z bazy postgresql 8

:)

0
select A.id, A.name, A.extension, B.id, B.file_id, B.size, B.maxDate from files A
left join ( SELECT C.id, C.size, D.file_id, D.maxDate
	    FROM versions C 
	    LEFT JOIN (SELECT max(date) AS maxDate, file_id FROM versions GROUP BY file_id) D on (C.file_id = D.file_id AND C.date = D.maxDate)
	  ) B ON (B.file_id = A.id);

A tu trochę przykładów:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

0

Super :D

Właśnie o to mi chodziło.

Dziękuję, miłego wieczoru :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1