我有一个这样的数据库表:
id date value minute
1 20100201 00:00:01.909 xxx 0
2 20100201 00:00:02.408 xxx 0
3 20100201 00:01:02.412 xxx 1
4 20100201 00:01:02.909 xxx 1
5 20100201 00:01:02.921 xxx 1
6 20100201 00:01:02.955 xxx 1
7 20100201 00:02:01.903 xxx 2
8 20100201 00:02:25.332 xxx 2
9 20100201 00:03:12.003 xxx 3
10 20100201 00:04:12.003 xxx 4
...
我希望结果为:
id date value1 minute
1 20100201 00:00:01.909 xxx 0
2 20100201 00:00:02.408 xxx 0
3 20100201 00:01:02.412 xxx 1
6 20100201 00:01:02.955 xxx 1
7 20100201 00:02:01.903 xxx 2
8 20100201 00:02:25.332 xxx 2
9 20100201 00:03:12.003 xxx 3
我想查询它并返回第一个&如果只有1,则每分钟的最后一个数字和每分钟1个记录(上面的ID为1,2,3,6,7,8,9)。
我尝试过使用group by id ASC - 按分钟分组,但它似乎在分组后进行排序,所以这不起作用。
有人有任何想法吗?我无法相信它无法完成!
答案 0 :(得分:0)
尝试此查询 -
SELECT t1.* FROM test_table t1
JOIN (
SELECT MIN(id) min_id, MAX(id) max_id FROM test_table
GROUP BY TIME_TO_SEC(TIME(date)) DIV 60) t2
ON t1.id = t2.min_id OR t1.id = t2.max_id
如果date
字段不是DATETIME或TIMESTAMP,则应修改GROUP BY。
另外,我建议你按照确切的分钟进行分组(例如 - 按年份分组,day_of_year,minute_of_day)。