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

如何基于startDate和dueDate提取数据库中的历史与待办事件ID

解决events表的历史/待办事件查询问题

嘿,我来帮你搞定这个SQL查询的问题!首先咱们得先弄明白你原来的查询为什么没返回结果——你的语句SELECT * FROM events WHERE startDate >= '2018-01-30' AND dueDate <= '2018-01-30'逻辑上是矛盾的:它要求事件的开始日期大于等于2018-01-30,同时结束日期小于等于2018-01-30,这只有当startDate和dueDate完全等于2018-01-30时才会命中,但你的数据里根本没有这样的记录,所以自然返回空啦。

下面针对你的两个需求分别给出正确的SQL语句:

1. 查询历史事件ID(Past EventId)

你的需求是找出startDate和dueDate均早于2018-01-30的事件,也就是整个事件已经完全结束。考虑到事件的startDate肯定是小于等于dueDate的,所以其实只要判断dueDate < '2018-01-30'就足够了(因为结束日期早于目标日期的话,开始日期必然也早于)。当然如果你想严格按照需求写出两个条件也完全没问题:

简洁版SQL:

SELECT eventId FROM events 
WHERE dueDate < '2018-01-30';

严格匹配需求的SQL:

SELECT eventId FROM events 
WHERE startDate < '2018-01-30' AND dueDate < '2018-01-30';

这两个语句都会返回你预期的eventId 1、2。

2. 查询待办事件ID(Upcoming EventId)

需求是找出**起止日期未全部结束(即dueDate晚于2018-01-30)**的事件,也就是还在进行中或尚未开始但会在之后结束的事件。只需要判断dueDate > '2018-01-30'即可:

SELECT eventId FROM events 
WHERE dueDate > '2018-01-30';

这个语句会返回你预期的eventId 3。

额外福利:一次查询区分事件状态

如果你想在一次查询里同时得到每个事件的状态(历史/待办),可以用CASE语句来实现:

SELECT 
    eventId,
    name,
    startDate,
    dueDate,
    CASE 
        WHEN dueDate < '2018-01-30' THEN 'Past'
        WHEN dueDate > '2018-01-30' THEN 'Upcoming'
        ELSE 'Today' -- 处理起止日期恰好是2018-01-30的情况
    END AS event_status
FROM events;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:33:58