我在mysql中有跟踪日志表,其中包含各种字段,包括日期时间字段。
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
现在我想获取此记录,但我想要的是它应该在特定分钟内仅获取一条记录。例如,在 give 表中,它应该首先使用 1
id
然后它应该跳过所有具有相同分钟的下一条记录,因此它应该跳过带有 id 2 3
的记录,因为它的小时和分钟与id 1
匹配,即 12 小时 4 分钟。然后它应该使用 id 4
获取记录,因为它的分钟是不同的,并跳过 12 小时 3 分钟的所有下一条记录,并移动到 12 小时 2 分钟。
所以最终输出应该是
id pos_datetime
1 2015-05-05 12:04:50
4 2015-05-05 12:03:40
8 2015-05-05 12:02:42
10 2015-05-05 12:01:30
请帮帮我...谢谢
您可以使用以下查询:
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
字段仅用于演示目的。
在这里演示