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

如何去除SQL数据表两行的NULL值,合并得到匹配的起止日期对

代码调整方案

你当前输出中的有效非空起始日期、结束日期数量完全匹配,仅需将两类非空值按时间顺序排序后一一配对,过滤空值即可得到目标结果。

调整后的完整SQL代码如下:

WITH intermediate_result AS (
    SELECT 
        (CASE WHEN (end_lag <> start_date) OR end_lag IS NULL THEN start_date END) AS start_date, 
        (CASE WHEN (start_lead <> end_date) OR start_lead IS NULL THEN end_date END) AS end_date
    FROM (
        SELECT 
            LEAD(start_date) OVER(ORDER BY start_date) AS start_lead, 
            start_date, 
            end_date, 
            LAG(end_date) OVER(ORDER BY end_date) AS end_lag
        FROM projects
    ) t1
)
SELECT a.start_date, b.end_date
FROM 
    (SELECT start_date, ROW_NUMBER() OVER (ORDER BY start_date) AS row_num 
     FROM intermediate_result 
     WHERE start_date IS NOT NULL) a
INNER JOIN 
    (SELECT end_date, ROW_NUMBER() OVER (ORDER BY end_date) AS row_num 
     FROM intermediate_result 
     WHERE end_date IS NOT NULL) b
ON a.row_num = b.row_num;

逻辑说明

  • 复用你原有逻辑生成中间结果表,保留已计算出的起始、结束日期字段
  • 分别提取中间结果里非空的起始日期、结束日期,按时间升序排序后生成同序列的行号
  • 通过行号关联两个子查询,即可实现有序的起止日期配对,完全匹配你期望的输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:05