Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybranie tylko zmieniających się danych
Forum PHP.pl > Forum > Bazy danych > MySQL
tommyexlee
Witam,
Mam problem z wyborem odpowiednich wierszy w MySQL i po prostu brak mi już pomysłów. Nie ukrywam, że do bycia ekspertem jeszcze mi dużo brakuje.
Mam taką tabelę:
Kod
dzien | cena
  1   | 50
  2   | 50
  3   | 60
  4   | 60
  5   | 90
  6   | 90


Potrzebuję wybrać tylko takie wiersze, których cena zmienia się o więcej niż 20 w stosunku do poprzedniego dnia.
Próbowałem robić w stylu:
Kod
SELECT dzien AS param, cena, (cena - (SELECT cena FROM tabela WHERE dzien < param ORDER BY dzien DESC LIMIT 1)) AS roznica FROM tabela WHERE roznica > 20

ale wywala mi błąd: Error Code: 1054. Unknown column 'roznica' in 'where clause'

Czy możecie mi pomóc?
Z góry dzięki.

Pozdrawiam,
Tommyexlee
Crozin
  1. [...] HAVING roznica > 20;
dmateo
Spróbuj ewentualnie tak, zachowasz czytelny kod i moze bedzie nawet szybsze:

  1. SELECT t2.dzien
  2. FROM #tabela t1
  3. LEFT JOIN #tabela t2 on t1.dzien = (t2.dzien-1)
  4. WHERE ( t2.cena - t1.cena ) > 20
tommyexlee
wow to takie proste? ohmy.gif dzięki za pomoc smile.gif
mmmmmmm
Przy założeniu, że masz wszystkie dni. Wystarczy jedna "dziura" i cały misterny plan ...
tommyexlee
Dobra wszystko działa ładnie pięknie, ale chciałbym jeszcze rozszerzyć funkcjonalność... Załóżmy, że mam tabelę:
Kod
dzien | cena | ile kupiono
  1   |  50  |  2
  2   |  50  |  3
  3   |  55  |  2
  4   |  60  |  1
  5   |  65  |  5
  6   |  65  |  3
  7   |  65  |  2
  8   |  70  |  5
  9   |  75  |  2
  10  |  80  |  3
  11  |  85  |  1
  12  |  85  |  1

Potrzebuję wyświetlić informację, przez jaki czas cena rosła oraz ile w sumie (w czasie tego wzrostu) kupiono tego towaru. Wynik końcowy powinien być taki:
Kod
dzien poczatku | dzien konca | cena poczatkowa | cena koncowa | ile kupiono
      2        |     5       |        50       |     65       |     11
      7        |     11      |        65       |     85       |     13

Kolumnę 'ile kupiono' pewnie trzeba załatwić funkcją SUM(), tylko nie za bardzo wiem po czym grupować wyniki.. nie mogę znaleźć żadnego rozsądnego kryterium grupowania. Próbowałem dorzucić warunek GROUP BY (roznica_dni=1), ale przecież ten warunek spełniony jest dla każdego wiersza, więc zapytanie mi zwróci wszystko...
Czy moglibyście pomoć?
Z góry dziękuję.

Pozdrawiam,
Tommyexlee
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.