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

SQL Server 2016基于多日期列对比查询引擎特定数据的实现

SQL Server 2016 多日期筛选查询实现

以下是满足需求的SQL语句,同时处理了字符串日期的类型转换问题,避免比较逻辑错误:

SELECT 
    engine,
    read_date,
    CASE 
        WHEN cyl1_last_maint_date IS NOT NULL 
             AND CONVERT(DATE, read_date, 101) > CONVERT(DATE, cyl1_last_maint_date, 101) 
        THEN cyl1_read
        WHEN cyl1_last_maint_date IS NULL THEN cyl1_read
        ELSE NULL
    END AS cyl1_read,
    CASE 
        WHEN cyl2_last_maint_date IS NOT NULL 
             AND CONVERT(DATE, read_date, 101) > CONVERT(DATE, cyl2_last_maint_date, 101) 
        THEN cyl2_read
        WHEN cyl2_last_maint_date IS NULL THEN cyl2_read
        ELSE NULL
    END AS cyl2_read
FROM engine_reads
WHERE 
    (cyl1_last_maint_date IS NULL 
     OR CONVERT(DATE, read_date, 101) > CONVERT(DATE, cyl1_last_maint_date, 101))
    OR (cyl2_last_maint_date IS NULL 
        OR CONVERT(DATE, read_date, 101) > CONVERT(DATE, cyl2_last_maint_date, 101))
ORDER BY engine, read_date;

逻辑说明

  • 字段处理:通过CASE表达式分别判断每个气缸的维护日期与读取日期的关系:
    • 若维护日期存在且读取日期晚于维护日期,保留对应气缸的读取值;
    • 若维护日期不存在,直接保留读取值;
    • 其他情况(维护日期存在但读取日期更早)将读取值置为NULL。
  • 行过滤:WHERE子句排除掉两个气缸的读取都不符合条件的行(即两个气缸的维护日期都存在,且读取日期均早于维护日期的无效行)。
  • 日期转换:使用CONVERT(DATE, 字段, 101)将MM/DD/YYYY格式的字符串日期转为日期类型,确保日期比较逻辑准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:33:16