C'è un modo per memorizzare l'ultimo risultato di righe iterate e usarlo per l'iterazione della riga successiva?Come salvare l'ultimo checkpoint nel sql da utilizzare per la riga successiva
Ad esempio, ho una tabella di risposta (Time_Table
).
__ Key type timeStamp
1) 1 B 2015-06-28 09:00:00
2) 1 B 2015-06-28 10:00:00
3) 1 C 2015-06-28 11:00:00
4) 1 A 2015-06-28 12:00:00
5) 1 B 2015-06-28 13:00:00
Ora supponiamo di avere un exceptionTime
di 90 minuti, che è costante. Se inizio controllando la mia Time_Table
poi:
per la prima fila, in quanto non v'è alcuna fila prima
09:00:00,
sarà direttamente mettere questo record nella mia tabella di destinazione. Ora il mio punto di riferimento è alle 9:00:00.Per la seconda fila
10:00:00,
l'ultimo punto di riferimento era09:00:00
eTIMESTAMPDIFF(s,09:00:00,10:00:00)
è 60, che è inferiore alla richiesta 90. Non aggiungo questa riga nella mia tabella di destinazione.Per la terza fila, l'ultima eccezione registrata era al
09:00:00
eTIMESTAMPDIFF(s,09:00:00,11:00:00)
è 120 che è superiore al punto di riferimento desiderato 90 in modo da scegliere questo disco ed è impostata11:00:00
.Per la quarta riga il
TIMESTAMPDIFF(s,11:00:00,12:00:00)
. Allo stesso modo non sarà salvato.Questo è di nuovo salvato.
tabella di destinazione
__ Key type timeStamp
1) 1 B 2015-06-28 09:00:00
2) 1 C 2015-06-28 11:00:00
3) 1 B 2015-06-28 13:00:00
C'è un modo che io possa risolvere questo problema purely in SQL
?
Il mio approccio:
SELECT * FROM Time_Table A WHERE NOT EXISTS(
SELECT 1 FROM Time_Table B
WHERE A.timeStamp > B.timeStamp
AND abs(TIMESTAMPDIFF(s,B.timeStamp,A.timeStamp)) > 90
)
Ma questa non sarà effettivamente lavoro.
@AmanS Vuol 'supporto Vertica' CTE ricorsiva? Se sì, qualcosa come ** [demo] (http://rextester.com/ALRF67310) ** dovrebbe funzionare. – lad2025
@ lad2025 No 'Vertica' non supporta CTE ricorsivo – AmanS
@AmanS Buono a sapersi e male per te. Mi chiedo se Vertica supporti qualcosa come l'aggiornamento bizzarro. È possibile creare una tabella temporanea, utilizzare un aggiornamento bizzarro per impostare lo stato, quindi mostrare il risultato. Altrimenti probabilmente hai bisogno di un qualche tipo di cursore/loop. – lad2025