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

SQL WHERE语句如何筛选billed_date早于date_submitted且保留后者为null的行

解决方案

不需要子查询,直接调整WHERE子句即可实现需求。你丢失空值行的核心原因是:NULL和任意日期做大小比较的结果都为UNKNOWN,无法被条件匹配,因此需要单独声明date_submitted为空的保留规则。

调整后的完整查询

SELECT
  dd.file_acceptance,
  billing.billed_date,
  indiv_responses.date_submitted
FROM ds
  LEFT OUTER JOIN dd
    ON ds.dd_id = dd.id
  LEFT OUTER JOIN billing
    ON ds.billing_id = billing.id
  LEFT OUTER JOIN indiv_responses
    ON indiv_responses.ds_id = ds.id
WHERE 
-- 第一层:满足初始日期门槛,可按需替换为你需要的2021-10-20或2021-10-25
(billing.billed_date >= '2021-10-20' OR indiv_responses.date_submitted >= '2021-10-20')
-- 第二层:保留空提交日期,或账单日期早于提交日期的行
AND (indiv_responses.date_submitted IS NULL OR billing.billed_date < indiv_responses.date_submitted)

兼容不同SQL方言的可选写法

如果你使用的数据库支持COALESCE函数(MySQL、PostgreSQL、SQL Server等主流数据库均支持),也可以合并写法,效果完全一致:

WHERE 
(billing.billed_date >= '2021-10-20' OR indiv_responses.date_submitted >= '2021-10-20')
AND billing.billed_date < COALESCE(indiv_responses.date_submitted, '9999-12-31')

这里的逻辑是把空的提交日期替换为一个极大的日期(9999-12-31),所有正常的账单日期都会小于这个值,就能自动保留空提交日期的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:08