我有来自多个传感器的数据。每条记录都有自己的ID,传感器ID,时间戳和测量值。像这样:
|--id--|--id_sensor--|-------timestamp-------|--value--|
1 1 '2017-08-23 10:00:00' 30
2 1 '2017-08-23 10:02:00' 30
3 1 '2017-08-23 10:04:00' 31
4 1 '2017-08-23 10:06:00' 31
5 1 '2017-08-23 10:08:00' 32
6 2 '2017-08-23 10:00:00' 24
7 2 '2017-08-23 10:01:00' 24
8 2 '2017-08-23 10:02:00' 24
9 2 '2017-08-23 10:03:00' 24
10 2 '2017-08-23 10:04:00' 24
11 2 '2017-08-23 10:05:00' 24
12 2 '2017-08-23 10:06:00' 25
如果值没有改变,我想排除记录,所以结果应如下所示:
|--id--|--id_sensor--|-------timestamp-------|--value--|
1 1 '2017-08-23 10:00:00' 30
3 1 '2017-08-23 10:04:00' 31
5 1 '2017-08-23 10:08:00' 32
6 2 '2017-08-23 10:00:00' 24
12 2 '2017-08-23 10:06:00' 25
我必须与sql server 2000兼容:-( 如果可行,我想避免使用游标。有人可以帮忙吗?
答案 0 :(得分:1)
类似的东西:
select your_table.* from your_table
join(
select min(id) as mid from your_table group by value
) t
on your_table.id = t.mid
答案 1 :(得分:1)
我认为以下内容可能更接近您真正想要的内容:
select t.*
from (select t.*,
(select top 1 t2.value
from t t2
where t2.sensor = t.sensor and
t2.timestamp < t.timestamp
order by t2.timestamp desc
) as prev_value
from t
) t
where prev_value is null or prev_value <> value;
您确实应该升级到受支持的SQL Server版本。甚至还提供免费版本。