Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie zwracające różnicę sumy dwóch wierszy
Forum PHP.pl > Forum > Bazy danych > MySQL
jurcio6
Witam,

Mam następujący problem - próbuję stworzyć zapytanie, które zwróci mi różnicę (sumy wartości z dwóch kolumn) z dwóch wierszy - jeden z wierszy będzie zawierał sumę dwóch kolumn z pierwszej próbki z danego dnia, drugi wiersz będzie zawierał sumę dwóch kolumn z ostatniej próbki z danego dnia. Pobranie i połączenie tych wierszy już mam, nie wiem tylko jak teraz otrzymać z nich różnicę. Zagmatwane, więc od razu kod.
  1. SELECT * FROM
  2. ( SELECT a, b, a+b suma, sDateTime FROM tabela1 WHERE sDateTime LIKE '2012-01-05%' LIMIT 1) AS t1
  3. UNION
  4. SELECT * FROM
  5. ( SELECT a, b, a+b suma, sDateTime FROM tabela1 WHERE sDateTime LIKE '2012-01-05%' ORDER BY sDateTime DESC LIMIT 1) AS t2

Z zapytania powyżej otrzymuję taki wynik:
| a | b | suma | sDateTime |
----------------------------------
| 1 | 2 | 3 | 2012-01-05 00:00:01
| 5 | 6 | 11 | 2012-01-05 23:59:59

Natomiast chcę otrzymać jedną liczbę, która będzie wynikiem działania: (suma z wiersza 2 - suma z wiersza 1), czyli w powyższym wypadku: 11-3 = 8. Jak to osiągnąć?

Próbowałem zagnieździć kod z pierwszej ramki w jeszcze jednego select'a, ale nie idzie - coś takiego:
  1. SELECT t2 - t1 FROM
  2. (
  3. SELECT * FROM
  4. (SELECT a, b, a+b suma, sDateTime FROM tabela1 WHERE sDateTime LIKE '2012-01-05%' LIMIT 1) AS t1
  5. UNION
  6. SELECT * FROM
  7. (SELECT a, b, a+b suma, sDateTime FROM tabela1 WHERE sDateTime LIKE '2012-01-05%' ORDER BY sDateTime DESC LIMIT 1) AS t2
  8. )

Jak to zrobić w taki sposób, żeby potem łatwo można było dodać kolejne pola (i różnice sum z nich, analogicznie do powyższego przykładu)? Proszę o pomoc.
droslaw
Ogólnie coś takiego:
  1. SELECT (t1.kol1+t1.kol2)-(t2.kol1+t2.kol2) FROM tabelax t1, tabelax t2 WHERE t1.id = x AND t2.id = y;

To zapytanie wykonuje złączenie w zakresie jednej tabeli.
W twoim wypadku może wyglądać np. tak:
  1. SELECT t1.id, t2.id, t1.suma-t2.suma roznica, t1.sDateTime, t2.sDateTime FROM
  2. (SELECT a, b, a+b suma, sDateTime FROM tabela1 WHERE sDateTime LIKE '2012-01-05%' LIMIT 1) AS t1
  3. (SELECT a, b, a+b suma, sDateTime FROM tabela1 WHERE sDateTime LIKE '2012-01-05%' ORDER BY sDateTime DESC LIMIT 1) AS t2
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.