编写SQL查询获取所有关联记录EndDate非空且早于2024/1/1的ID
筛选所有子记录EndDate非空且早于2024年1月1日的ID
需求明确:需获取所有关联记录的EndDate均不为空,且全部早于2024-01-01的ID。根据给定数据集,ID=1符合条件(所有EndDate非空且早于指定日期),ID=2因存在一条EndDate为NULL的记录被排除。
以下是两种可行的SQL查询方案:
方案1:GROUP BY + HAVING 统计不符合条件的记录数
SELECT ID FROM your_table_name GROUP BY ID HAVING COUNT(CASE WHEN EndDate IS NULL OR EndDate >= '2024-01-01' THEN 1 END) = 0;
逻辑说明:按ID分组后,统计每个ID下存在EndDate为空或不早于2024-01-01的记录数量。当该数量为0时,说明该ID的所有记录都满足要求。
方案2:NOT EXISTS 排除存在不符合条件记录的ID
SELECT DISTINCT t1.ID FROM your_table_name t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.ID = t1.ID AND (t2.EndDate IS NULL OR t2.EndDate >= '2024-01-01') );
逻辑说明:查询不存在任何一条EndDate为空或不早于2024-01-01的记录的ID,这类ID即为符合要求的结果。
两种方案针对给定数据集执行后,均会返回唯一结果 ID=1。
内容的提问来源于stack exchange,提问作者Vandana Shah
相关产品推荐
相关产品推荐

