MySQL在日期时间列中选择30分钟间隔的日期时间记录

时间:2014-07-30 00:55:58

标签: mysql

我希望有人可以帮我查询一下?我有一个表,每10秒24/7写一次条目/行,所以很多行和图表需要很长时间。我想每30分钟选择一行,一个例子可能是最好的。以下工作,但每隔30分钟给我一次结果。

SELECT * FROM db.table WHERE mytimestamp AND mod(minute(time),30) = 0

给我时间如下的结果

2014-03-01 01:30:01
2014-03-01 01:30:13
2014-03-01 01:30:24
2014-03-01 01:30:35
2014-03-01 01:30:46
2014-03-01 01:30:58
2014-03-01 02:00:01
2014-03-01 02:00:13
2014-03-01 02:00:24
2014-03-01 02:00:35
2014-03-01 02:00:46
2014-03-01 02:00:57

我想要的只是一个像这样的结果

2014-03-01 01:30:01
2014-03-01 02:00:01
2014-03-01 02:30:01

2 个答案:

答案 0 :(得分:2)

SELECT
    *
FROM db.table
WHERE 
    (mytimestamp like '%:00:%') or (mytimestamp like '%:30:%')
GROUP BY group by DATE_FORMAT(mytimestamp, '%Y-%M-%d %H:%i')

http://sqlfiddle.com/#!2/6779a4/11

答案 1 :(得分:1)

根据您的示例和您想要的发布回答,您希望以30:01或00:01正确结束的时间间隔?

您可以使用的一种方法是LIKE

select * from SamplerTable where
(Daytime like '%:00:01%') or (Daytime like '%:30:01%');

尽管如此,请注意插入的记录绝对必须以:30:01或00:01使用此方法结束。

Fiddle在这里。如果这有帮助,请告诉我。

编辑:最接近00或30,或许仍然有效。

 select * from SamplerTable where
    (Daytime like '%:00:%') or (Daytime like '%:30:%');

将输出分钟为00或30的记录。您只需添加order by来对输出asc或desc进行排序

编辑:像仍然有效,只需添加GROUP by:

select * from SamplerTable where
(Daytime like '%:00:%') or (Daytime like '%:30:%')
group by DATE_FORMAT(Daytime, '%Y-%M-%d %H:%i')

CREDIT去了Rajavel D这个答案。 Fiddle