2017-11-15 1 views
0

Ich brauche nur Daten zurückgeben, die einige Werte außerhalb Zeitintervall und nichts innerhalb Zeitintervall hat.SQL: Filtern von Daten, die einige Datensätze außerhalb Zeitintervall und nichts in

create table dbo.TestingTable 
(
    [Group] varchar(20) 
    ,[Date] int 
    ,[Time] time 
) 

insert into dbo.TestingTable values 
('ddo',20171108, '02:00:00.0000000') 
,('ddo',20171108, '03:00:00.0000000') 
,('ddo',20171108, '05:00:00.0000000') 
,('ddo',20171108, '08:00:00.0000000') 
,('ddo',20171108, '17:00:00.0000000') 
,('ddo',20171108, '19:00:00.0000000') 
,('ddo',20171108, '23:00:00.0000000') 
,('ddo',20171109, '04:00:00.0000000') 
,('ddo',20171109, '06:00:00.0000000') 
,('ddo',20171109, '08:00:00.0000000') 
,('ddo',20171109, '15:00:00.0000000') 
,('ddo',20171109, '21:00:00.0000000') 
,('kpo',20171108, '02:00:00.0000000') 
,('kpo',20171108, '03:00:00.0000000') 
,('kpo',20171108, '05:00:00.0000000') 
,('kpo',20171108, '08:00:00.0000000') 
,('kpo',20171108, '15:00:00.0000000') 
,('kpo',20171108, '19:00:00.0000000') 

So gewünschte Ausgabe für vordefinierte @group, @mintime und @maxtime

declare @group as varchar(20) = 'ddo' 
declare @mintime as varchar(20) = '09:00:00.0000000' 
declare @maxtime as varchar(20) = '16:00:00.0000000' 

sollte sein [Datum] Spalte mit Daten übergibt Zustand.

Im obigen Fall sollte nur 20171108 [Datum] zurückgegeben werden, da 20171109 einen Wert innerhalb des Intervalls zwischen @mintime und @maxtime hat.

+2

Diese Frage zeigt keine Forschungsanstrengungen. –

Antwort

1

Ein Verfahren verwendet group by mit einer having Klausel, die die Zeiten in der Zeitperiode zählt:

select tt.[date] 
from TestingTable tt 
group by tt.[date] 
having sum(case when [time] >= @mintime and [time] <= @maxtime then 1 else 0 end) = 0; 
+0

Vielen Dank Gordon, das funktioniert gut. Ich habe nicht erwartet, dass es so einfach sein könnte :-) – mateskabe

Verwandte Themen