SQL查询:从查询结果中排除部分重复项
我有来自多个传感器的数据。每个记录都有自己的id、传感器id、时间戳和测量值。像这样:SQL查询:从查询结果中排除部分重复项,sql,sql-server-2000,Sql,Sql Server 2000,我有来自多个传感器的数据。每个记录都有自己的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'
|--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兼容:-
如果可能的话,我想避免使用游标。有人能帮忙吗?比如:
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
比如:
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
我认为以下可能更接近你真正想要的:
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版本。甚至还有免费版本。我认为以下内容可能更接近您真正想要的:
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版本。免费版本甚至可用。类似的内容应该适合您:1如果值重复怎么办?比如说,传感器1是30,30,31,31,30,30。2您真的在使用SQL Server 2000吗?升级的时间差不多是十年前了。我同意戈登的观点,我不能使用分组。我想升级,但有些客户仍然在2000:-上运行。类似的东西应该适合您:1如果值重复怎么办?比如说,传感器1是30,30,31,31,30,30。2您真的在使用SQL Server 2000吗?升级的时间差不多是十年前了。我同意戈登的观点,我不能使用分组。我想升级,但有些客户仍然在2000:-上运行。我想你也应该按id\u传感器分组。我想你也应该按id\u传感器分组。谢谢你戈登,非常接近。谢谢戈登,非常接近。