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

如何按Numeric Date分组填充Start Date字段的NULL值?

需求说明

按**数字日期(Numeric Date)分组,将每组中存在的非空开始日期(Start Date)**值,填充至同组内开始日期字段的NULL值中。

注意事项

数字日期与开始日期数值不匹配,无法通过dateadd(day, [Numeric Date], '1840-12-31')结合CASE语句实现需求。

现有数据

订单ID(Order ID)数字日期(Numeric Date)数字日期ID(Numeric Date ID)开始日期(Start Date)
4784216593465934NULL
4784216593465934.017/25/2021
4784216593465934.02NULL
4784216593465934.03NULL
4784216593465934.05NULL
4784216596765967NULL
4784216596765967.02NULL
4784216596765967.038/7/2021
4784216596765967.05NULL
4784216596765967.05NULL
4784216596765967.05NULL

期望结果

订单ID数字日期数字日期ID开始日期
47842165934659347/25/2021
4784216593465934.017/25/2021
4784216593465934.027/25/2021
4784216593465934.037/25/2021
4784216593465934.057/25/2021
47842165967659678/7/2021
4784216596765967.028/7/2021
4784216596765967.038/7/2021
4784216596765967.058/7/2021
4784216596765967.058/7/2021
4784216596765967.058/7/2021

当前使用的SQL代码

SELECT DISTINCT
[Order ID]
,LEFT([Numeric Date ID], 5) 'Numeric Date'
,[Numeric Date ID]
,[Start Date]

FROM Orders
WHERE [Order ID] = '478421'

解决方案

使用窗口函数MAX()配合PARTITION BY按数字日期分组,提取每组内非空的开始日期填充NULL值:

SELECT 
    [Order ID] AS 订单ID,
    [Numeric Date] AS 数字日期,
    [Numeric Date ID] AS 数字日期ID,
    MAX([Start Date]) OVER (PARTITION BY [Numeric Date]) AS 开始日期
FROM Orders
WHERE [Order ID] = '478421'

代码说明

  • PARTITION BY [Numeric Date]:按数字日期字段分组
  • MAX([Start Date]):自动忽略NULL值,获取每组内唯一的非空开始日期
  • 无需DISTINCT:保留原数据的所有行,符合期望结果的行数要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:27:13