从当前点和未来点提取数据的Oracle SQL查询

从当前点和未来点提取数据的Oracle SQL查询,oracle,Oracle,我有一个sql,我需要能够从今天凌晨4点到明天凌晨4点提取数据。我需要数据来显示从凌晨4点到凌晨1:30的每小时生产量。我很难将识别午夜翻转的逻辑放入其中。这需要自动提取日期,而不是手动输入日期。基本上: where mod_date_time >= trunc(sysdate) + 4/24 and mod_date_time <= trunc(sysdate)+1 + 3/24 + 59/24*60 其中mod_date_time>=trunc(sysdate)+4/24 和m

我有一个sql,我需要能够从今天凌晨4点到明天凌晨4点提取数据。我需要数据来显示从凌晨4点到凌晨1:30的每小时生产量。我很难将识别午夜翻转的逻辑放入其中。这需要自动提取日期,而不是手动输入日期。基本上:

where mod_date_time >= trunc(sysdate) + 4/24
and mod_date_time <= trunc(sysdate)+1 + 3/24 + 59/24*60
其中mod_date_time>=trunc(sysdate)+4/24

和mod_date_time这是很容易做到的间隔

 where mod_date_time >= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am today
 and  mod_date_time <= trunc(sysdate) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow
其中mod_date_time>=trunc(sysdate)+to_dsinterval('04:0:0')--今天凌晨4:00

而mod_date_time“到明天凌晨4点”和“直到凌晨1:30”相互矛盾。请下定决心,然后告诉我们你的决定。然后:对于第二个不等式,使用严格不等式,这将使生活更轻松:
转换从凌晨4点运行到凌晨13点,但由于潜在的OT,我必须捕获从凌晨4点到凌晨4点的所有数据。至于第二点,是指3/24+59/24*60。所以你知道,如果没有括号,它工作得很好,我在其他sql中使用这个等式。滚动的问题是一旦午夜来临,日期就会调整;如果我需要11月28日上午4点到午夜,11月29日午夜到凌晨4点,那么对于当前系统日期,它将只从凌晨4点到午夜,因为没有数据可供使用。请将系统日期+1午夜拉到凌晨4点。
  where mod_date_time >= trunc(shift_start_date) + to_dsinterval('0 4:0:0') -- 4:00am today
 and  mod_date_time <= trunc(shift_start_date) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow
 where mod_date_time >= trunc(sysdate-1) + to_dsinterval('0 4:0:0') -- 4:00am today
 and  mod_date_time <= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am tomorrow