根据日期字段选择许多数据库的不同行

时间:2016-02-26 14:16:48

标签: mysql sql

对不起标题。很难弄清楚确切的措辞。所以我有一个MySQL数据库,其结构为ID,Name和Date,适用于事件触发。我有很多事件会在一天中定期发生,这意味着某些事件可能会在某些时间显示而不是在其他时间显示。每个触发的事件都是一个新行,其中ID是主键和特定行的指示符,Name是事件的名称或创建者或发起者,Date是事件发生时的时间戳。

我的问题是Name有很多值,我想查找在特定时间段内发生的事件,但不是在不同的时间段内发生的事件。所以任何事件名称都显示在下午3点到下午4点但不在下午5点到6点之间。不担心时间戳部分,只是想知道是否有办法说出一个陈述来得出我正在寻找的结论。

所以基本上,我想选择一个不同的名称,其中行存在w和x之间的日期,以及y和z之间不存在行

2 个答案:

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