如何使用两列

时间:2018-01-30 11:01:14

标签: mysql sql

我有两列,使用这两列我必须从我的数据库中获取记录,

  1. 过去的EventId
  2. 即将举行的eventId
  3. 过去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
    

6 个答案:

答案 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