我有两列,使用这两列我必须从我的数据库中获取记录,
过去eventId表示哪些日期(startDate & dueDate)
已经完成,我想记录
即将发生的eventId意味着哪些是日期(startDate& dueDate)尚未完成,我想拍摄记录
事件(表名)
eventId name startDate dueDate
1 A 2018-01-22 2018-01-22
2 B 2018-01-26 2018-01-27
3 C 2018-01-29 2018-01-31
我试过像这样的SQL查询
SELECT * FROM events WHERE startDate >= '2018-01-30' AND dueDate <= '2018-01-30'
但是没有发生任何事情,我不知道如何编写SQL查询
预计过去的eventId
eventId
1
2
预计即将举行的eventId
eventId
3
答案 0 :(得分:0)
对于过去的活动:
SELECT * FROM events WHERE startDate <= '2018-01-30' AND DueDate <= '2018-01-30'
对于未来事件:
SELECT * FROM events WHERE DueDate >= '2018-01-30'
答案 1 :(得分:0)
查看Link
过去的活动
SELECT id as 'eventId' FROM events WHERE startDate <= '2018-01-30' AND dueDate <= '2018-01-30';
未来事件
SELECT id as 'eventId' FROM events WHERE startDate >= '2018-01-30' AND dueDate >= '2018-01-30';
答案 2 :(得分:0)
您可以尝试这样的事情:
SELECT
eventId
,case when dueDate < '2018-01-30' then 'Past' else case when duedate > '2018-01-30' then 'Future' END END
FROM Events
答案 3 :(得分:0)
假设比2018-01-30&#39;现在是
过去的事件:
select * from events where '2018-01-30' <= startDate and dueDate <= '2018-01-30'
upcomming event
select * from events where '2018-01-30' <= startDate and '2018-01-30' <= dueDate
答案 4 :(得分:0)
您的查询将在每一行中应用您的where条件,因此它将返回的行是一个开始日期大于'2018-01-30'且截止日期小于'2018-01-30'的行,这不是可能。所以你必须编写两个查询,之后你可以使用两个查询结果。
SELECT * FROM events WHERE startDate <= '2018-01-30'
UNION ALL
SELECT * FROM events WHERE startDate >= '2018-01-30' AND DueDate >= '2018-01-30'
此查询将返回包含过去和未来事件的单个列。 但是,您将无法确定哪个事件ID适用于过去的事件,哪个事件ID适用于将来的事件。
要确定您必须编写两个不同的查询。
答案 5 :(得分:0)
对于过去的eventId
select eventId from events where dueDate <= 2018-01-30
即将发生的eventId
select eventId from events where startDate >= 2018-01-30 or dueDate > 2018-01-30