Ich habe eine BeispieltabelleAbfrage gleichen Ereigniscode mit mindestens einem Stundenintervall auszuwählen
CREATE TABLE [dbo].[wt](
[id] [int] NULL,
[dt] [datetime] NULL,
[txt] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[wt]
([id]
,[dt]
,[txt])
VALUES
(1, '2017-01-01 00:01:00.000', 't1'),
(2, '2017-01-01 00:03:00.000', 't1'),
(3, '2017-01-01 00:02:00.000', 't1'),
(4, '2017-01-01 01:04:00.000', 't1'),
(5, '2017-01-01 02:10:00.000', 't1'),
(6, '2017-01-01 00:01:00.000', 't1'),
(7, '2017-01-01 01:05:00.000', 't1'),
(8, '2017-01-01 02:10:00.000', 't2'),
(9, '2017-01-01 00:03:00.000', 't2'),
(10,'2017-01-01 01:04:00.000', 't2'),
(11,'2017-01-01 00:52:00.000', 't1')
Ich möchte eine Liste der txt-Code und dt Veröffentlichung txt Code gruppiert haben, wo Intervall beetwen txt Auftreten mindestens eine Stunde und nichts dazwischen. Um zu klären, wann t1 das erste Mal um '2017-01-01 00: 01: 00.000' auftritt, dann ist das nächste Vorkommen, das ich suche, nach mindestens einer Stunde , die '2017-01-01 01: 04: 00.000' sein wird dritte Vorkommen, die ich suche, ist nach mindestens einer Stunde von '2017-01-01 01: 04: 00.000' und so weiter.
Nach einiger Suche fand ich so etwas wie diese
;with a as (
select txt, dt,
rn = row_number() over (partition by txt order by dt asc)
from [wt]),
b as (
select txt, dt, dt as dt2, rn, null tm, 0 recurrence
from a
where rn = 1
union all
select a.txt, a.dt, a.dt,
a.rn, datediff(MINUTE,a.dt,b.dt) tm,
case when dateadd(MINUTE,-60,a.dt) < b.dt then recurrence + 1 else 0 end
from b join a
on b.rn = a.rn - 1 and b.txt = a.txt
)
select txt, dt, rn, tm, recurrence
from b
where recurrence = 0
order by txt, dt
aber das war nicht gut, weil das Intervall nicht vom ersten Auftreten gezählt wird aber von den letzten, so habe ich
txt dt rn tm recurrence
t1 2017-01-01 00:01:00.000 1 NULL 0
t1 2017-01-01 02:10:00.000 8 -65 0
t2 2017-01-01 00:03:00.000 1 NULL 0
t2 2017-01-01 01:04:00.000 2 -61 0
t2 2017-01-01 02:10:00.000 3 -66 0
I Ich denke, ich habe einen Workaround gefunden, da ich in diesem Fall innerhalb der gleichen Stunde Aufnahmen machen konnte, aber ich bin nicht zufrieden mit dieser Lösung.
Alle Vorschläge zur Verbesserung des Skripts, damit das Intervall in Minuten eingegeben werden kann, wäre willkommen.
Was ist Ihre erwartete Ausgabe? –