需求:找出 某日7:45后、次日7:45前的数据
分析:
- 以某日的零点为A,时间数据为B
- diff = (A + 7:45) - B = A - (B - 7:45)
- ifs(diff=-1,前一天,diff=0,当日,diff=1,次日,...)
关键函数:
- datediff(day,某日,时间列),提取某日的自然日期(零时),与时间列相减,向下取整
- dateadd(hour,增减数量,时间列),增减多少小时
-- from 提取了11-9 零点到11-14 零点之间的数据
-- datediff 提取了 11-11 11:11:11 的【自然日期 11-11 00:00:00】,然后与【finishtime - 7:45】求差,向下取整
-- 筛选结果为0的,即为 11-11早上7:45 到 11-12早上7:45之间的数据-- 原理是,将finishtime 减去 7:45,然后筛选 与某日零点 相距24小时以内 的数据
-- 比如,11-11 7:45,记为 11-11 0:00; 11-11 7:44,记为 11-10 23:59;
-- 11-12 7:44,记为 11-11 23:59;筛选出每日7:45后、次日7:45前的数据。
select
dateadd(
hour,
-7,
finishtime
) 'dateadd(hour)' ,
dateadd(
minute,
-45,
dateadd(
hour,
-7,
finishtime
)
) 'dateadd(minute)' ,
datediff(
day,
'2022-11-11 11:11:11',
dateadd(
minute,
-45,
dateadd(
hour,
-7,
finishtime
)
)
) 'datediff(day)' ,
finishtime,
machine
from view_AllFinishingOps_idx where finishtime >='2022-11-9' and finishtime <= '2022-11-14'
order by finishtime
-- from 提取了11-9 零点到11-14 零点之间的数据
-- datediff 提取了 11-11 11:11:11 的【自然日期 11-11 00:00:00】,然后与【finishtime - 7:45】求差,向下取整
-- 筛选结果为0的,即为 11-11早上7:45 到 11-12早上7:45之间的数据
-- 原理是,将finishtime 减去 7:45,然后筛选 与某日零点 相距24小时以内 的数据
-- 比如,11-11 7:45,记为 11-11 0:00; 11-11 7:44,记为 11-10 23:59;
-- 11-12 7:44,记为 11-11 23:59;筛选出每日7:45后、次日7:45前的数据。