如果1次出现当前有效,则排除所有记录

时间:2016-11-10 05:11:26

标签: sql sql-server sql-server-2008

我有一个名为“Events”的表,用于存储有关事件的信息,包括有效的开始和结束日期。事件可能会随着时间的推移多次发生。如果该事件当前有效,我需要排除给定事件的所有记录。在我下面的例子中,我只想返回一个“奥运会”的值,因为这是今天唯一没有活动的事件(今天是10/11/16,因为我写这个)。

╔═══════════╦════════════╦════════════╗
║   Event   ║   Start    ║    End     ║
╠═══════════╬════════════╬════════════╣
║ World Cup ║ 1/07/2016  ║ 15/07/2016 ║
║ Olympics  ║ 15/08/2016 ║ 25/08/2016 ║
║ World Cup ║ 1/09/2016  ║ 15/09/2016 ║
║ Olympics  ║ 15/09/2016 ║ 25/09/2016 ║
║ Olympics  ║ 15/10/2016 ║ 25/10/2016 ║
║ World Cup ║ 1/11/2016  ║ 15/11/2016 ║
║ World Cup ║ 1/12/2016  ║ 15/12/2016 ║
╚═══════════╩════════════╩════════════╝

4 个答案:

答案 0 :(得分:1)

SELECT distinct Event
FROM tableName WHERE Event NOT IN (SELECT Event 
                                   FROM tableName
                                   WHERE CONVERT(VARCHAR(11),GETDATE(),103) BETWEEN StartDate AND EndDate
                                  )

答案 1 :(得分:1)

这应该可以解决问题。

SELECT DISTINCT event
FROM table
WHERE NOT EXISTS (
    SELECT 1 
    FROM table
    WHERE GETDATE() >= start 
    AND GETDATE()<= end
)

答案 2 :(得分:0)

试试这个它会起作用并给你你想要的答案: 只有在今天的日期才有效的事件:输出为“奥运会”

aVec

答案 3 :(得分:0)

这个使用MySQL工作,更改了一些宏,它对SQL服务器应该是一样的。

SELECT event,count(event)
FROM table_name
WHERE event NOT IN (
    SELECT event
    FROM table_name
    WHERE start <= NOW() AND end >= NOW()
    GROUP BY event
);

转换宏会得到类似的结果:(未经测试)

SELECT event,count(event)
FROM table_name
WHERE event NOT IN (
    SELECT event
    FROM table_name
    WHERE start <= GETDATE() AND end >= GETDATE()
    GROUP BY event
);

这也为您提供了计数,但您可以删除,count(event)部分。

这是我根据您提供的数据得到的输出:

+----------+--------------+
| event    | count(event) |
+----------+--------------+
| Olympics |            3 |
+----------+--------------+