按时间段group by的 sql怎么写

table1 表 3个字段 id-- varchar-- primary key, telno--varchar, contime--date
表里 id是唯一的。
现在想查询 所有在contime上下3分钟之内的telno相同的第一条数据

我是这么写的 select * from table1 where id=(select min(id) from table1 group by telno)但我不知道上下5分钟怎么弄..

[b]问题补充:[/b]
jim.jin
你那思路好像不适合 上下3分钟.
你那是把时间分成固定段了..假如我的那些数据刚适用好在第一个3和第二个3中就不适用了啊
[b]问题补充:[/b]
没人处理过这方面的嘛?
[b]问题补充:[/b]
问题 解决..开始解决思路错误了..直接取第一条 第一条前3分钟之内是不是有数据有的话直接过滤..没有的话取出..

2个回答

那你可以 group by (contime 最大的记录的contime - contime)的分钟数 整除 3)

也就是离最后一条记录分钟数

你说上下3分钟,一定要有一个基准,否则就有矛盾,

比如下面数据:
以不同记录为基准结果都不一样。

id contime telno
1 10:10 aaa
2 10:9 bbb
3 10:8 bbb
4 10:7 ccc
5 10:6 ccc
6 10:5 ccc
7 10:4 ddd

再加 group by (现在的时间 - contime)的分钟数(也就是离现在分钟数) 整除 3)

离现在分钟数 整除3后
0 0 整除 3 = 0
1 1 整除 3 = 0
2 2 整除 3 = 0
3 3 整除 3 = 1
4 4 整除 3 = 1
5 5 整除 3 = 1
6 6 整除 3 = 2
7 7 整除 3 = 2
7 7 整除 3 = 2

sql:
select * from table1 where id=(select min(id) from table1 group by telno, (离现在分钟数整除3))

(离现在分钟数整除3) 公式 不同 SQL 工具不同,思路是这样

要精确到秒就 group by(离现在秒数 整除180)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问