Jak wybrac z tej samej tabelki obecna i poprzednia wartosc ?

0

majac wpisy w tabelce takie:

id value
1 | 3 -> 3
3 | 0 -> 0
4 | 0 -> poprzedion bylo 0 obecna wart < 5 wiec tego nie ma
10 | 1 -> poprzednio bylo 0 a obecna wartosc < 5 wiec tego nie ma
12 | 5 -> 5
14 | 10 -> 10
15 | 33 -> 33
16 | 66 -> 66
17 | 15 -> 15
20 | 0 -> 0
21 | 0 -> -
22 | 1 -> -
25 | 5 -> 5
26 | 16 -> 16
27 | 5 -> 5
30 | 1 -> 1
34 | 1 -> -
44 | 6 -> 6

Jakie zapytanie zroibic zeby wybrac tylko te liczby ktorych poprzednia wartosc byla wieksza lub = 5 czyli wynik mialby byc taki
3
0
5
10
33
66
15
0
5
16
5
1
6

0

ale co to jest
0 -> poprzedion bylo 0 obecna wart < 5 wiec tego nie ma
1 -> poprzednio bylo 0 a obecna wartosc < 5 wiec tego nie ma
5 -> 5
10 -> 10
to są wartości w komórkach?? Chcesz odpowiedź to a) podajesz PRZYKŁADOWE ALE REALNE dane jakie są w tabeli b) na podstawie danych z a podajesz DOKŁADNIE jaki jest oczekiwany wynik i c) opisujesz skąd się taki wynik wziął

0

realne dane w tabeli sa takie

id value
1 | 3
3 | 0
4 | 0
10 | 1
12 | 5
14 | 10
15 | 33
16 | 66
17 | 15
20 | 0
21 | 0
22 | 1
25 | 5
26 | 16
27 | 5
30 | 1
34 | 1
44 | 6

chce wybrac te rekordy jezeli poprzednia wartosc wpisu value byla wieksza lub = 5
czyli wybieram pierwsza wartosc 3 poprzednio nie ma nic (NULL) wiec pobieram 3
kolejne biore 0 patrze ze poprzednia byla 3 czyli 3 <= 5 wiec nie biore 0 pod uwage
nastepnie kolene 0 mam ale znowu nie biore pod uwage . potem mam wartos 1 ale ona tez
jest <=5 wiec nie wybieram jej a nastepnie mam wartosc 5 ktora spelnia warunek 5<=5
wiec biore ja do wyswietlania i tak chce wybrac wszystkie po kolei rekordy.
Da sie to w ogole zrobic w sql ?

0

A gzie jest przechowywana ta poprzednia wartość?

0

no wczesniejszy wpis to wlasnie ta poprzednia wartosc

0

Słowem wstępu:
Takie "przechowywanie" zależności rodem z Excela nie ma nic wspólnego z relacyjnymi bazami danych. Co to znaczy "wcześniejszy wpis"? Jak zrobie order by rand() to kóry będzie wczesniejszy?

Rozwiązanie: (zakładając że musisz pracować na takich danych jakie masz i nie możesz ich przeorganizować w jakąś bardziej sensowną strukturę)
Dodaj do tabeli kolumne z wartościami od 1 w górę, po kolei bez żadnych luk (W Oracl'u jest ROWNUMBER, ale w PG nie wiem). Czyli tabelka wygląda tak:

id value Numer
1 | 3 | 1
3 | 0 | 2
4 | 0 | 3
10 | 1 | 4
12 | 5 | itp

I zapytanie z tego (nie sprawdzone):

select id, value 
from tabela as T1 
inner join tabela T2 on T1.Numer = (T2.Numer - 1)
where T2.value >= 5
order by id
0

powinno zadziałać

select id from dupa d1 where (select value from dupa d2 where d2.id < d1.id order by id desc limit 1) >= 5 or d1.id = (select min(id) from dupa)

1 użytkowników online, w tym zalogowanych: 0, gości: 1