我在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
请帮帮我们......谢谢
答案 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
值的记录。
您也可以使用子查询的派生表执行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
字段仅用于演示目的。