2

タイムスタンプが異なる1つのテーブルDT:

日付時刻

22/01/2013 22:30
16/10/2012 11:20
30/03/2012 20:50

開始日と終了日を持つ別のテーブルタイムフレーム:

SDT                     EDT
22/01/2013 23:30        22/01/2013 23:40
22/01/2013 20:30        22/01/2013 20:40  
22/01/2013 22:10    X   22/01/2013 22:40 <--should filtered out because
                                            one of the timestamps(values from DT table)
                                            is between SDT & EDT
16/10/2012 11:00        16/10/2012 11:10
16/10/2012 11:00    X   16/10/2012 11:40 <--should filtered out because
                                            one of the timestamps(values from DT table)
                                            is between SDT & EDT

したがって、望ましい結果は、DTテーブルのタイムスタンプ(date_time)がテーブルTIMEFRAMESのタイムフレームの間にない行を除いて、TIMEFRAMESテーブルのすべての行になります。

SDT                   EDT
22/01/2013 23:30      22/01/2013 23:40
22/01/2013 20:30      22/01/2013 20:40    
16/10/2012 11:00      16/10/2012 11:10

http://www.sqlfiddle.com/#!4/340a8/3

4

3 に答える 3

3

試す:

select * from timeframes f where not exists
(select 1 from dt where dt.date_time between f.sdt and f.edt)
于 2013-01-23T14:39:40.533 に答える
1
select sdt, edt 
from timeframes t
left join dt on (dt.date_time between t.sdt and t.edt)
where dt.date_time is null;

sqlfiddle

于 2013-01-23T14:47:23.703 に答える
0

左外部結合と集計を使用してこれを行うことができます。

select tf.sdt, tf.edt, COUNT(*), COUNT(dt.date_time)
from timeframes tf left outer join
     dt
     on dt.date_time between tf.sdt and tf.edt
group by tf.sdt, tf.edt
having COUNT(*) <> COUNT(dt.date_time)

このhaving句は、すべての dts が範囲内にあるかどうかをチェックしています。

于 2013-01-23T14:36:41.287 に答える