Desidero selezionare alcune righe in base a determinati criteri e quindi prendere una voce da quella serie e le 5 righe prima e dopo di essa.Come posso selezionare righe adiacenti a una riga arbitraria (in sql o postgresql)?
Ora, posso farlo numericamente se c'è una chiave primaria sul tavolo, (ad esempio chiavi primarie che sono numericamente 5 in meno della chiave della riga di destinazione e 5 in più della chiave della riga di destinazione).
Quindi selezionare la riga con la chiave primaria della 7 e le righe nelle vicinanze:
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
Ma se seleziono solo alcune righe per cominciare, perdo quel metodo numerico di utilizzo di chiavi primarie (e che è stato supponendo che le chiavi non avessero comunque lacune nel loro ordine), e hanno bisogno di un altro modo per ottenere le file più vicine prima e dopo una determinata riga mirata.
L'uscita chiave primaria di tale select potrebbe apparire più casuale e quindi meno succeptable di localizzazione matematica (dal momento che alcuni risultati sarebbero filtrati, fuori, ad esempio con un 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
nota come causa le lacune nelle chiavi primarie causate dall'esempio dove condizione (ad esempio perché ci sono molti elementi inattivi), non sto ottenendo più 5 sopra e 5 sotto, invece sto ottenendo il più vicino 1 sotto e il il 9 più vicino sopra, invece.
Penso che l'istruzione SELECT che hai scritto avrebbe funzionato in entrambi gli esempi. – LatinSuD
Err, l'istruzione select restituirebbe valori, sì, ma le righe che restituiva sarebbero essenzialmente casuali, al contrario di 5 sopra e 5 sotto, è il problema. – Kzqai