Buongiorno a tutti volevo sapere se potete aiutarmi con il filtro per i dati in uscita da una query, praticamente, dalla query, carico un report e tutti ricorda hanno un data (riportata fino al secondo di registrazione del record), un id e un nome operazione.
Il problema è che dando un parametro in entrata di X secondi, si dovrebbero prendere tutti i record di quell'intervallo di secondi ed estrarne solo il più vecchio, come posso impostare il filtro?
Nel caso un between fra le date fosse sufficiente, come lo imposto per far estrarre solo il record più vecchio di un dato intervallo di secondi?
Grazie a tutti per l'aiuto e buona giornata
Benvenuto! Fornisci un campione dei tuoi dati, nel seguente formato(google translate)
create table #formaggio(id int, nome nvarchar(50), secundo int)
insert into #formaggio
select 1, 'baggio ha mancato il rigore', 345
La mia tabella ha il seguente formato
ID_EVENTO TIMESTAMP CODICE_OPERAZIONE
A 11.04.2020 12:02:32 DoConto
B 11.04.2020 12:03:03 DoConto
C 11.04.2020 12:03:05 DoConto
D 11.04.2020 12:09:15 DoConto
E 11.04.2020 12:14:54 DoConto
F 11.04.2020 12:14:54 DoConto
G 11.04.2020 12:14:56 DoConto
H 11.04.2020 12:14:57 DoConto
I 11.04.2020 12:14:58 DoConto
L 11.04.2020 12:15:00 DoConto
M 11.04.2020 12:15:01 DoConto
N 11.04.2020 12:15:32 DoConto
O 11.04.2020 12:16:03 DoConto
Se si stabilisce un intervallo di (ad esempio) 5 secondi, di quel intervallo dovrà essere estratto solo il record più vecchio
cosi per favore? intervalli tra quali valori?
utilizzando i dati di esempio forniti e con un intervallo di 5 secondi quale dovrebbe essere il risultato?
declare @mushroom table(ID_EVENTO char(1), zizo datetime, CODICE_OPERAZIONE nvarchar(50))
insert into @mushroom
select 'A', '11.04.2020 12:02:32', 'DoConto' union
select 'B', '11.04.2020 12:03:03', 'DoConto' union
select 'C', '11.04.2020 12:03:05', 'DoConto' union
select 'D', '11.04.2020 12:09:15', 'DoConto' union
select 'E', '11.04.2020 12:14:54', 'DoConto' union
select 'F', '11.04.2020 12:14:54', 'DoConto' union
select 'G', '11.04.2020 12:14:56', 'DoConto' union
select 'H', '11.04.2020 12:14:57', 'DoConto' union
select 'I', '11.04.2020 12:14:58', 'DoConto' union
select 'L', '11.04.2020 12:15:00', 'DoConto' union
select 'M', '11.04.2020 12:15:01', 'DoConto' union
select 'N', '11.04.2020 12:15:32', 'DoConto' union
select 'O', '11.04.2020 12:16:03', 'DoConto'
select * from @mushroom
Tra tutte quelle eseguite, di quelle dell'intervallo di 5 secondi considerato (ad esempio dalle ore 12:14:55 alle 12:15:00), sia riportata solo il record più vecchio.
Ovviamente in input, non posso inserire i vari orari come where condition
declare @filter int = 5;
;with src
as
(
select ID_EVENTO,
CODICE_OPERAZIONE,
entryDate as _Current,
LEAD(entryDate, 1,0) OVER (ORDER BY entryDate) AS Next ,
--LAG(entryDate, 1,0) OVER (ORDER BY entryDate) AS Previous ,
case
when LEAD(entryDate, 1,0) OVER (ORDER BY entryDate) = '1900-01-01 00:00:00.000' then null
else datediff(second, entryDate, LEAD(entryDate, 1,0) OVER (ORDER BY entryDate))
end as _seconds
from @mushroom
)
select *
from src
where _seconds = @filter