通过基于日期时间间隔跳过记录来从表中获取数据

时间:2015-06-12 05:02:16

标签: mysql

我在mysql中有tracklog表,其中包含各种字段,包括datetime字段。

tracklog_data

id  pos_datetime
1   2015-05-05 12:04:50 
2   2015-05-05 12:04:30 
3   2015-05-05 12:04:10
4   2015-05-05 12:03:40
5   2015-05-05 12:03:20  
6   2015-05-05 12:03:05
7   2015-05-05 12:03:01
8   2015-05-05 12:02:42
9   2015-05-05 12:02:20
10  2015-05-05 12:01:30

现在我想获取这些记录,但我想要的是它应该只获取特定分钟的一条记录。 例如,在表格中,它应首先使用id 1,然后它应该跳过具有相同分钟的所有下一个记录,因此它应该跳过id 2 3的记录,因为它的小时和分钟与{匹配{1}}即12小时4分钟。然后它应该用id 1获取记录,因为它的分钟是不同的,并且在12小时3分钟后跳过所有下一条记录,然后移动到12小时2分钟。

所以最后的输出应该是

id 4

请帮帮我们......谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT id, pos_datetime, val
FROM mytable 
WHERE id IN (
   SELECT MIN(id)
   FROM mytable
   GROUP BY DATE(pos_datetime), 
            HOUR(pos_datetime), 
            MINUTE(pos_datetime) )
子查询的

GROUP BY子句在同一组内放置具有相同日期,小时和分钟的所有记录。 MIN(id)只会返回每组最小id值的记录。

Demo here

您也可以使用子查询的派生表执行INNER JOIN

SELECT m.id, pos_datetime, val
FROM mytable AS m
INNER JOIN (SELECT MIN(id) AS id
            FROM mytable
            GROUP BY DATE(pos_datetime), 
                     HOUR(pos_datetime), 
                     MINUTE(pos_datetime)) t
ON m.id = t.id 

val字段仅用于演示目的。

Demo here