You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术请求:为RegistrationDate添加当前时段标记列

SQL方案:标记当前时段对应的RegistrationDate行

现有当日RegistrationDate列表

RegistrationDate
2024-10-31 07:30:00.000
2024-10-31 07:50:00.000
2024-10-31 08:40:00.000
2024-10-31 09:30:00.000
2024-10-31 10:40:00.000
2024-10-31 11:30:00.000
2024-10-31 13:00:00.000
2024-10-31 13:50:00.000

原查询语句

SELECT 
  DISTINCT AttendanceRegister.RegistrationDate 
FROM 
  AttendanceRegister 
WHERE 
  CAST(AttendanceRegister.RegistrationDate AS DATE) = CAST(GETDATE() AS DATE)

新增时段标记列的SQL实现

利用窗口函数LEAD获取每个时段的下一个时间点,结合CASE语句判断当前时间所属时段:

WITH DailyRegistration AS (
    SELECT 
        DISTINCT RegistrationDate
    FROM 
        AttendanceRegister
    WHERE 
        CAST(RegistrationDate AS DATE) = CAST(GETDATE() AS DATE)
),
RegistrationWithNextPeriod AS (
    SELECT 
        RegistrationDate,
        LEAD(RegistrationDate) OVER (ORDER BY RegistrationDate) AS NextRegistrationDate
    FROM 
        DailyRegistration
)
SELECT 
    RegistrationDate,
    CASE 
        WHEN GETDATE() BETWEEN RegistrationDate AND ISNULL(NextRegistrationDate, DATEADD(DAY, 1, CAST(GETDATE() AS DATE)))
        THEN 'Current Period'
        ELSE ''
    END AS PeriodStatus
FROM 
    RegistrationWithNextPeriod
ORDER BY 
    RegistrationDate;

逻辑说明

  1. DailyRegistration:筛选出当日所有唯一的RegistrationDate;
  2. RegistrationWithNextPeriod:通过LEAD函数为每个时段匹配下一个时段的时间,最后一行的NextRegistrationDate会返回NULL;
  3. 主查询:
    • 普通行判断当前时间是否处于RegistrationDate和NextRegistrationDate之间,符合则标记为Current Period;
    • 最后一行用ISNULL将NextRegistrationDate替换为次日零点,确保当前时间晚于最后一个时段时,最后一行会被标记为当前时段。

内容的提问来源于stack exchange,提问作者S.exe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:03:11