Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie z SUM i sortowaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
user2
Witam!
Nie mam pewności czy wybrałem dobry dział, więc jeżeli nie to przepraszam.

W każdym razie mam takie zapytanie do bazy:

  1. SELECT numer,nazwa,miasto,DATA, SUM(kwota) FROM test GROUP BY numer

Mam też bazę, która wygląda mniej więcej tak:

numer nazwa miasto data kwota
1234 Polekpol Kraków 2007-10-20 100
1234 Polekpol Warszawa 2007-11-01 32
4536 Łączpol Gdańsk 2007-10-24 15
4536 Łączpol Gdańsk 2007-10-26 98

I teraz jak wyświetlam wyniki poprzez:

  1. <?php
  2. $result = mysql_query($query2) or die(mysql_error());
  3.  
  4. while($row = mysql_fetch_array($result)){
  5.  
  6. //printy itp.
  7.  
  8. }
  9. ?>


Wynik wygląda tak:

1234 Polekpol Kraków 2007-10-20 132
4536 Łączpol Gdańsk 2007-10-24 113

Z Łączpolem nie ma problemu, ale jak wyświetla Polekpol to wyświetla mi dane z tego starszego rekordu (czyli zwraca miasto Kraków, mimo że w drugim już jest Warszawa).
Wie ktoś jak zrobić (posortować?) dane, żeby wyświetlał Warszawa? Próbowałem to sortować jakoś po dacie, ale nie działa. Może jest jakaś funkcja, która "mówi": "patrz na ostatni rekord"?

Z góry dzięki za szybką odpowiedź smile.gif
Pozdrawiam
najtje
Może tak się da:
  1. SELECT * FROM (SELECT numer, sum(kwota) FROM test GROUP BY numer) AS q1 NATURAL JOIN (SELECT numer ,nazwa, miasto,DATA FROM test GROUP BY numer HAVING DATA=max(DATA)) AS q2;
user2
Niestety to nie działa sad.gif

Może istnieje coś odwrotnego do DISTINCT - czyli zaciąga jeden wiersz, ale z "dołu" a nie z góry? Albo jak zrobić zapytanie w zapytaniu, żeby działało na zasadzie:
  1. SELECT * FROM ( SELECT numer, nazwa, DATA, kwota FROM test ORDER BY DATA DESC)


Czyli, żeby "przerzedzić" wyniki, posortować je i dopiero później sumować itd.
Z tym tylko, że powyższe zapytanie nie działa.

EDIT
Obszedłem problem. Niestety nie jest to najbardziej profesjonalne rozwiązanie, ale działa. Zrobiłem drugie zapytanie, które wyciąga wszystkie świeże dane za pomocą
  1. SELECT * FROM test WHERE numer = 'jakistamnumer' ORDER BY DATA DESC LIMIT 1

I Dane z tego zapytania + SUM(kwota) z drugiego wyświetlam.

Może to się komuś przyda smile.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.