SQL查询减少,删除不必要的行

时间:2017-12-07 15:30:01

标签: sql sql-server-2008

我想实现这个

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

2 个答案:

答案 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子句参数,时间范围小于或大于运算符。