Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem. Aktualne umowy
Forum PHP.pl > Forum > Bazy danych > MySQL
gummmibear
Chciałbym wyciągnąć wszystkie aktywne umowy.
na tabele z umowami składa się :
-id
-id_klienta
-id_projektu
-data_rozpoczęcia
-data_zakonczenia

teraz jeżeli mamy taką tabelę:


|id| |id_klient| id_projekt | data_rozpoczecia | data_zakonczenia |


4 | 1 | 46 | 2009-08-24 | 2010-09-12 |

1 | 1 | 75 | 2009-03-09 | 2010-09-12 |

5 | 1 | 75 | 2009-08-24 | 2010-09-12 |


wynikiem zapytania powinno być najświeższa umowa

dla danego id_klienta i id_projektu

czyli coś takiego:

4 | 1 | 46 | 2009-08-24 | 2010-09-12 |

5 | 1 | 75 | 2009-08-24 | 2010-09-12 |


thek
Więc zrób tak... Najpierw posortuj całą tablicę po polach:
id_klienta - rosnąco,
id_projektu - rosnąco,
id - malejąco
To przygotuje grunt pod to, byś potem tak posortowane dane pogrupował po id_projektu smile.gif
SELECT * FROM (SELECT * FROM tabela ORDER BY id_klienta ASC, id_projekt ASC, id DESC) sorted GROUP BY id_projekt
jmail
  1.  
  2. SELECT
  3. id_klient
  4. ,id_projektu
  5. ,max(data_rozpoczecia)
  6. FROM
  7. tabela
  8. GROUP BY
  9. id_klienta
  10. ,id_projektu
  11.  
thek
jmail... Jeśli najpierw pogrupuje po id_klienta to zwróci mu tylko 1 rekord. Popatrz na to co chce uzyskać.... Jeśli ma kilka projektów jednego klienta to wszystkie te projekty chce wyświetlić, nie tylko najnowsze umowy tegoż kolesia zauważ, że w przykładzie wyniku oba rekordy mają te samo id_klient. Trochę źle się wyraził w tym co chce uzyskać, ale przykład raczej rozwiewa wątpliwości.
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.