Chcę wybrać niektóre wiersze na podstawie pewnych kryteriów, a następnie pobrać jeden wpis z tego zestawu i 5 wierszy przed nim i po nim.Jak wybrać sąsiadujące wiersze do dowolnego rzędu (w sql lub postgresql)?
Teraz mogę to zrobić numerycznie, jeśli istnieje klucz podstawowy na stole (np. Klucze podstawowe, które są numerycznie o 5 mniejsze niż klucz rzędu docelowego i o 5 więcej niż klucz rzędu docelowego).
Więc wybierz wiersz z klucza podstawowego z dnia 7 i pobliskich rzędów:
select primary_key from table where primary_key > (7-5) order by primary_key limit 11;
2
3
4
5
6
-=7=-
8
9
10
11
12
Ale jeśli mogę wybrać tylko niektóre wiersze na początku, tracę że metoda numeryczna użyciu kluczy podstawowych (i to było zakładając, że klucze nie mają żadnych przerw w ich zamówieniu) i potrzebują innego sposobu na uzyskanie najbliższych wierszy przed i po pewnym ukierunkowanym wierszu.
Kluczem wyjście podstawowy taki select może wyglądać bardziej przypadkowy, a tym samym mniej succeptable do matematycznego lokalizowania (ponieważ niektóre wyniki będą filtrowane, na zewnątrz, na przykład z where active=1
):
select primary_key from table where primary_key > (34-5)
order by primary_key where active=1 limit 11;
30
-=34=-
80
83
100
113
125
126
127
128
129
zauważyć, jak ze względu na luki w kluczach podstawowych spowodowane przez przykład, w którym warunek (na przykład becaseu jest wiele nieaktywnych pozycji), już nie jestem najbliższy 5 powyżej i 5 poniżej, zamiast tego otrzymuję najbliższy 1 poniżej i najbliżej 9 powyżej.
Myślę, że napisana instrukcja SELECT działałaby w obu przykładach. – LatinSuD
Błąd, instrukcja select zwróci wartości, tak, ale wiersze, które powróciły, będą zasadniczo losowe, w przeciwieństwie do 5 powyżej i 5 poniżej, jest problem. – Kzqai