Discussion:
[SQL] Różnica między wierszami
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
hipolit
2009-06-15 09:03:32 UTC
Permalink
w bazie są dane z zewnątrz - z programu, który zbiera dane z jakiś
tam próbek
tabela wygląd +/- tak

ID_PRÓBKI|DATA_GODZINA|STAN|STATUS| i inne

Akurat tu jest ważna kolumna STAN

chcę przedstawić na WWW na wykresie stan próbki np od godziny 11 do 14
lub dać włączenie śledzenia zmiany stanu próbki - aby niepotrzebnie
nie dawać do canvasa bądź ile danych można stwierdzić że np w skali 1
dla 1px to odległość od poprzedniego 10
czyli

mając takie dane
ID_PRÓBKI|DATA_GODZINA|STAN|
10|2009-06-10 10:00:11|11
10|2009-06-10 10:00:21|12
10|2009-06-10 10:00:31|22
10|2009-06-10 10:01:01|24
10|2009-06-10 10:02:11|54

chcąc przedstawić to na wykresie dla danej skali wystarczy, że pobiorę
sobie punkty oddalone od siebie o 10 i wystarczy

ale zupełnie brak mi pomysłu

chodzi mi o takie coś

przypuśćmy, że chcę na wykresie mieć dane od godziny 10:00:00
pierwsza dana pochodzi z 10:00:11
i jest to wiersz - 10|2009-06-10 10:00:11|11
kolejna dana czyli wiersz 10|2009-06-10 10:00:21|12 - jest nieistotna
bo odległość 1 jest bez znaczenia, czyli dla danej skali jest mniejsza
niż 1px - więc chcę ją pominąć

kolejna dana czyli wiersz - 10|2009-06-10 10:00:31|22 - już musi być
uwzględniony bo odległość 10 ma znaczenie

następny wiersz - 10|2009-06-10 10:01:01|24 - jest do pominięcia bo
różnica między 22 a 24 jest 2, a mi chodzi o odległośc min 10

ostatnia dana z przykładu - 10|2009-06-10 10:02:11|54 - wchodzi w
zbiór wynikowy bo odległość miedzy 54, a 24 jest 30 co spełnia warunek
=10
i jak zrobić takie zapytanie SQL żeby dostać taki rezultat - czyli aby
różnica między polem STAN w kolejnych wierszach była >= 10
Paweł Matejski
2009-06-15 11:45:01 UTC
Permalink
Post by hipolit
w bazie są dane z zewnątrz - z programu, który zbiera dane z jakiś
tam próbek
tabela wygląd +/- tak
ID_PRÓBKI|DATA_GODZINA|STAN|STATUS| i inne
Akurat tu jest ważna kolumna STAN
chcę przedstawić na WWW na wykresie stan próbki np od godziny 11 do 14
lub dać włączenie śledzenia zmiany stanu próbki - aby niepotrzebnie
nie dawać do canvasa bądź ile danych można stwierdzić że np w skali 1
dla 1px to odległość od poprzedniego 10
czyli
mając takie dane
ID_PRÓBKI|DATA_GODZINA|STAN|
10|2009-06-10 10:00:11|11
10|2009-06-10 10:00:21|12
10|2009-06-10 10:00:31|22
10|2009-06-10 10:01:01|24
10|2009-06-10 10:02:11|54
chcąc przedstawić to na wykresie dla danej skali wystarczy, że pobiorę
sobie punkty oddalone od siebie o 10 i wystarczy
ale zupełnie brak mi pomysłu
chodzi mi o takie coś
przypuśćmy, że chcę na wykresie mieć dane od godziny 10:00:00
pierwsza dana pochodzi z 10:00:11
i jest to wiersz - 10|2009-06-10 10:00:11|11
kolejna dana czyli wiersz 10|2009-06-10 10:00:21|12 - jest nieistotna
bo odległość 1 jest bez znaczenia, czyli dla danej skali jest mniejsza
niż 1px - więc chcę ją pominąć
kolejna dana czyli wiersz - 10|2009-06-10 10:00:31|22 - już musi być
uwzględniony bo odległość 10 ma znaczenie
następny wiersz - 10|2009-06-10 10:01:01|24 - jest do pominięcia bo
różnica między 22 a 24 jest 2, a mi chodzi o odległośc min 10
ostatnia dana z przykładu - 10|2009-06-10 10:02:11|54 - wchodzi w
zbiór wynikowy bo odległość miedzy 54, a 24 jest 30 co spełnia warunek
=10
i jak zrobić takie zapytanie SQL żeby dostać taki rezultat - czyli aby
różnica między polem STAN w kolejnych wierszach była >= 10
Funkcją.
--
P.M.
hipolit
2009-06-15 12:23:53 UTC
Permalink
Post by Paweł Matejski
Funkcją.
dzięki za odpowiedź
wylewny nie jesteś ale dzięki - możesz rozwinąć - np w MySQL, z tego
co wiem aby zwracać wiersze trzeba użyć procedury czyli CALL, funkcje
(czy funkcja) byłby by o tyle dobre ,ze mozna je wżenić w zapytanie -
ale jeśli masz jakiś pomysł o może się podzielisz, co w tej funkcji -
na razie wyrzuciłem to na zewnątrz i PHP to obrabia, ale jeśli lepiej/
wydajniej/szybciej/ by to zrobiła baza to niech to robi - bo po co
przesyłac zbiór wynikowy 100 elementowy skoro można 10
Paweł Matejski
2009-06-15 14:05:57 UTC
Permalink
Post by hipolit
Post by Paweł Matejski
Funkcją.
dzięki za odpowiedź
wylewny nie jesteś ale dzięki
SQL zdaje się nie definiuje funkcji ( a nawet jeśli, to nikt takiego standardu nie używa). Więc co miałem być bardziej
wylewny?
Post by hipolit
- możesz rozwinąć - np w MySQL, z tego
co wiem aby zwracać wiersze trzeba użyć procedury czyli CALL, funkcje
(czy funkcja) byłby by o tyle dobre ,ze mozna je wżenić w zapytanie -
ale jeśli masz jakiś pomysł o może się podzielisz, co w tej funkcji -
na razie wyrzuciłem to na zewnątrz i PHP to obrabia, ale jeśli lepiej/
wydajniej/szybciej/ by to zrobiła baza to niech to robi - bo po co
przesyłac zbiór wynikowy 100 elementowy skoro można 10
MySQL Ci nie pomogę, bo funkcji w nim nie znam. Ogólnie mogę Ci powiedzieć, że zazwyczaj warto, bo ogranicza to ilość
danych przesyłanych do klienta.
--
P.M.
artiun
2009-06-15 18:16:16 UTC
Permalink
Post by hipolit
Post by Paweł Matejski
Funkcją.
dzięki za odpowiedź
wylewny nie jesteś ale dzięki - możesz rozwinąć - np w MySQL, z tego
co wiem aby zwracać wiersze trzeba użyć procedury czyli CALL, funkcje
(czy funkcja) byłby by o tyle dobre ,ze mozna je wżenić w zapytanie -
ale jeśli masz jakiś pomysł o może się podzielisz, co w tej funkcji -
na razie wyrzuciłem to na zewnątrz i PHP to obrabia, ale jeśli lepiej/
wydajniej/szybciej/ by to zrobiła baza to niech to robi - bo po co
przesyłac zbiór wynikowy 100 elementowy skoro można 10
To nie dziwne, że wylewny nie jest. Nie podałeś bazy, wersji... A ma to dość
duże znaczenie. Skoro potrafisz to zrobić w PHP to nie widzę problemu.
Sam nie znam składni dla MySQL'a, ale np. z tego
http://koliko.no-ip.org/mysql/wyklad11_procedury_skladowe.pdf
(strona 11)
wynika, że da się to prosto zrealizować. Odległości jako DECLARE (zmienne w
procedurze), IF dla odpowiedniej różnicy i SELECT dla wyplucia danych.
Wszystko na CURSOR po indeksie (ORDER).

Baza ma znaczenie, funkcje i procedury nie wszędzie występują, są inaczej
realizowane, a wyplucie danych może być różnie realizowane w różnych
silnikach baz.
--
Artur
hipolit
2009-06-15 12:23:53 UTC
Permalink
Post by Paweł Matejski
Funkcją.
dzięki za odpowiedź
wylewny nie jesteś ale dzięki - możesz rozwinąć - np w MySQL, z tego
co wiem aby zwracać wiersze trzeba użyć procedury czyli CALL, funkcje
(czy funkcja) byłby by o tyle dobre ,ze mozna je wżenić w zapytanie -
ale jeśli masz jakiś pomysł o może się podzielisz, co w tej funkcji -
na razie wyrzuciłem to na zewnątrz i PHP to obrabia, ale jeśli lepiej/
wydajniej/szybciej/ by to zrobiła baza to niech to robi - bo po co
przesyłac zbiór wynikowy 100 elementowy skoro można 10

hipolit
2009-06-16 07:02:56 UTC
Permalink
Dzięki za odpowiedzi

ale mam pytanie kolejne

czy da się coś takiego zrealizować za pomocą procedury/funkcji w MySQL-
u

faktycznie sprowadza się to 3 kroków

1)pobranie wierszy wg odpowiedniego kryterium
2)obrobienie zwróconego zbioru - czyli pozbycie się niepotrzebnych
wierszy
3)zwrócenie już obrobionego zbioru

jak do tej pory, jesli już robiłem procedury/funkcje to nie były to
jakieś zamotane konstrukcje - wobec tego moje pytanie, czy da się
zwrócić zadeklarować i tablicę?


a jesli nie to jak takie coś zrobić
Loading...