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

如何用SQL按EMP_ID分组为Employee表添加配送状态列

SQL实现Employee表状态字段查询方案

核心实现逻辑

使用窗口函数按Emp_ID分组统计,无需额外适配新增员工ID,天然支持后续扩展。

兼容主流数据库的查询语句

SELECT 
    Emp_ID,
    DELIVERY_TIME,
    Delivery_number,
    CASE
        WHEN DELIVERY_TIME > '2021-08-08' THEN 'IN FUTURE'
        WHEN rn = 1 THEN 'DELIVERING'
        ELSE 'DELIVERED'
    END AS Status
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY Emp_ID 
            ORDER BY CASE WHEN DELIVERY_TIME < '2021-08-08' THEN DELIVERY_TIME END DESC
        ) AS rn
    FROM Employee
) t

逻辑说明

  • 窗口函数PARTITION BY Emp_ID会自动按员工ID分组统计,新增员工无需修改查询语句即可适配。
  • 内层子查询排序逻辑:仅对小于当前日期的记录按DELIVERY_TIME倒序排列,每个员工最新的历史配送记录排序值为1。
  • 状态判断优先级:优先判断配送时间晚于当前日期的记录标记为IN FUTURE;剩余小于当前日期的记录中,排序值为1的标记为DELIVERING,其余历史记录标记为DELIVERED。

动态日期适配

如果需要使用实时当前日期而非固定2021年8月8日,将语句中所有'2021-08-08'替换为对应数据库的当前日期函数即可:

  • MySQL/PostgreSQL:CURRENT_DATE
  • Oracle:TRUNC(SYSDATE)
  • SQL Server:CAST(GETDATE() AS DATE)

内容的提问来源于stack exchange,提问作者Raghav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:27:00