我有一个名为“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 ║ ╚═══════════╩════════════╩════════════╝
答案 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 |
+----------+--------------+