Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z unikalnymi rekordami
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
seth-kk
mam 2 tabele - jedna z plikami i druga z logami pobran tyhc plikow i z tego musze wyciagnac informacje o ostatnio pobranych plikach
normalnie napisalbym cos w stylu
  1. SELECT f.name
  2. FROM files f
  3. JOIN logs l ON f.id = l.file_id
  4. GROUP BY f.name
  5. ORDER BY l.date

problem w tym ze postgres (w moim przypadku 8.1.17) wymusza uzycie wszystkich kolumn w group by/distinct co uniemozliwia prawidlowe odrzucenie powtorzen
mozna to jakos obejsc lub zmienic strukture zapytania bez zmiany struktury bazy? a moze to kwestia konfiguracji postgresa?
Zbłąkany
Odrzucenie powtórzeń pobranych logów, czy czegoś innego?
seth-kk
zostawienie tylko ostatniego loga dla kazdego pliku, w miedzyczasie przyszedl mi do glowy pomysl z podzapytaniem ktore weryfikuje date za pomoca funkcji max() ale nie wyglada zbyt wydajnie
Cytat
...Nie da się, to nie PostgreSQL

to chyba nie jest adekwatne do tego przypadku winksmiley.jpg
Zbłąkany
Sprawdź poniższe zapytanie, powinno być dobrze smile.gif
  1. SELECT DISTINCT ON (f.name) f.name FROM files f INNER JOIN (SELECT file_id ,date FROM logs ORDER BY date DESC) QR ON f.id=QR.file_id;
seth-kk
hmm ciekawa konstrukcja - gdzie moge poznac wiecej takich niecodziennych rozwiazan?
chyba musze wycofac to co napisalem wyzej o postgresie;)
dzieki!
ps tak jest dobrze
  1. ... DISTINCT ON (f.name) ...
Zbłąkany
Ta konstrukcja wynika ze składni i zastosowania klauzuli DISTINCT. Więcej informacji znajdziesz tutaj lub tutaj smile.gif

PS. Poprawiłem moje zapytanie w poprzednim poście tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.