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

SQL查询:如何获取指定日期范围内无效的ITEMID记录?

查询指定时刻处于无效状态的ITEMID

我的数据库中有一张表,部分物品对应多条记录,包含字段ITEMID、VALIDFROM、VALIDTO。需要查询在TODATE的23:59:59时刻处于无效状态的ITEMID。

示例数据

ITEMID    |VALIDFROM           |VALIDTO
---------------------------------------------------------------------------------
1         |01/01/2024 00:00:00 |02/01/2024 23:59:59
1         |04/01/2024 00:00:00 |10/01/2024 23:59:59
1         |15/01/2024 00:00:00 | null      (null表示无过期日期)
2         |30/12/2023 00:00:00 |02/01/2024 23:59:59
3         |31/12/2023 00:00:00 | null      (null表示无过期日期)
4         |30/12/2023 00:00:00 |03/01/2024 23:59:59
5         |03/01/2024 01:00:00 |03/01/2024 02:00:00
6         |02/01/2024 00:00:00 |03/01/2024 01:59:59
6         |03/01/2024 02:00:00 |03/01/2024 23:59:59

测试条件与期望结果

当指定TODATE = '2024-01-03 23:59:59'时,期望得到以下ITEMID:

ITEMID
---------------------------------------------------------------------------------
1
2
4
5
6

解决方案SQL

思路:排除目标时刻有效的ITEMID

先找出所有在2024-01-03 23:59:59处于有效状态的ITEMID,再从总列表中排除这些ID,剩下的就是无效的。

-- 替换your_table为你的实际表名
SELECT DISTINCT ITEMID
FROM your_table
WHERE ITEMID NOT IN (
    SELECT ITEMID
    FROM your_table
    WHERE VALIDFROM <= '2024-01-03 23:59:59'
      AND (VALIDTO IS NULL OR VALIDTO >= '2024-01-03 23:59:59')
);

思路二:直接判断无有效记录覆盖目标时刻

用NOT EXISTS判定某个ITEMID不存在任何一条记录覆盖目标时间:

-- 替换your_table为你的实际表名
SELECT DISTINCT t1.ITEMID
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.ITEMID = t1.ITEMID
      AND t2.VALIDFROM <= '2024-01-03 23:59:59'
      AND (t2.VALIDTO IS NULL OR t2.VALIDTO >= '2024-01-03 23:59:59')
);

逻辑说明

  • 有效状态判定:某条记录的VALIDFROM早于/等于目标时刻,且VALIDTO为NULL(永久有效)或晚于/等于目标时刻。
  • 无效状态的ITEMID:该ID下没有任何一条记录满足上述有效条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:57:39