我想实现这个
ID | NAME | CODE | TIME | Start | Stop
--------|------|------|-----------------------|---------------------|------------
4B37B930| EV | FI | 2017-10-20 08:30:00 | 2017-10-20 08:30:00 | 2017-10-20 08:34:00
3333E8C4| HK | FI | 2017-10-20 12:33:00 | 2017-10-20 12:33:00 | 2017-10-20 12:36:00
EF84D06D| HK | SE | 2017-10-20 12:37:00 | 2017-10-20 12:37:00 | 2017-10-20 12:39:00
来自同一表中的这些行
ID | NAME | CODE | TIME | Start | Stop
--------|------|------|-----------------------|-----------|------------
4B37B930| EV | FI | 2017-10-20 08:30:00 | |
7AA6E032| EV | FI | 2017-10-20 08:33:00 | |
B59D4931| EV | FI | 2017-10-20 08:34:00 | |
3333E8C4| HK | FI | 2017-10-20 12:33:00 | |
1C4890A1| HK | FI | 2017-10-20 12:34:00 | |
AA246243| HK | FI | 2017-10-20 12:35:00 | |
A99DFF3C| HK | FI | 2017-10-20 12:36:00 | |
EF84D06D| HK | SE | 2017-10-20 12:37:00 | |
1D8C4963| HK | SE | 2017-10-20 12:38:00 | |
0358656B| HK | SE | 2017-10-20 12:39:00 | |
如果行在5分钟内并且表中具有相同的NAME和CODE值,则删除行。请注意,最多连续5行可以丢失,在这种情况下,TIME值为08:31,08:32的行丢失但仍然希望表2中的前三行替换为一行,如图所示在表1第1行中,类似地,表2中的第4-7行将被表1中的第2行替换,依此类推。
这是一个链接,所以SQL小提琴 http://sqlfiddle.com/#!9/44af04/1/0
答案 0 :(得分:1)
你好使用按结果分组的联接
select a.id, b.min_time time, b.min_time Start, max_time Stop
from my_table a
inner join (
select date(time) date, hour(time) hour, min(time) min_time, max(time) max_time
from my_table
group by date(time), hour(time)
) b on date(a.time) = b.date and hour(a.time) = b.hour
答案 1 :(得分:0)
但是你的问题对我来说有点让人困惑,缩小行是什么意思。猜测它是删除,您可以通过删除查询来实现相同的where子句参数,时间范围小于或大于运算符。