对不起标题。很难弄清楚确切的措辞。所以我有一个MySQL数据库,其结构为ID,Name和Date,适用于事件触发。我有很多事件会在一天中定期发生,这意味着某些事件可能会在某些时间显示而不是在其他时间显示。每个触发的事件都是一个新行,其中ID是主键和特定行的指示符,Name是事件的名称或创建者或发起者,Date是事件发生时的时间戳。
我的问题是Name有很多值,我想查找在特定时间段内发生的事件,但不是在不同的时间段内发生的事件。所以任何事件名称都显示在下午3点到下午4点但不在下午5点到6点之间。不担心时间戳部分,只是想知道是否有办法说出一个陈述来得出我正在寻找的结论。
所以基本上,我想选择一个不同的名称,其中行存在w和x之间的日期,以及y和z之间不存在行
答案 0 :(得分:0)
我猜你可以使用子查询选择5-6pm的所有行,然后选择3-4pm之间的所有行减去子查询的行:
--3-4pm
SELECT Name
FROM TableName
WHERE Date > 'YYYY/mm/dd' AND Date < 'YYYY/mm/dd'
AND ID NOT IN (
--5-6pm
SELECT ID
FROM TableName
WHERE Date > 'YYYY/mm/dd' AND Date < 'YYYY/mm/dd'
)
答案 1 :(得分:0)
您正在寻找在下午3点到4点之间有记录的名字,下午5点到下午6点之间没有记录。您需要一个名称列表作为结果。因此,您可以汇总数据,例如每个名称获取一行(GROUP BY name
)。然后使用HAVING
过滤数据。
select name
from mytable
group by name
having sum( extract(hour from date) = 15 ) > 0
and sum( extract(hour from date) = 17 ) = 0;
这使用了MySQL的布尔逻辑,其中TRUE = 1且FALSE = 0.