我有一个包含列值和时间戳的表。价值每秒都在不断变化。所以我的数据如下
V1 T1
V1 T2
V2 T3
V3 T4..
等等。所以时间戳会不断增加,但是值可以与它们不变的相同。 我想只选择值与前一行不同的行。 所以我想减少数据并只选择数据发生变化的记录。 有人会知道怎么做吗?
答案 0 :(得分:2)
这仅适用于SQL Server 2012或更高版本
WITH cte AS (
SELECT
V,T,
LAG(V) OVER (ORDER BY T) AS LAST_V
FROM
TABLE
)
SELECT
V, T
FROM
cte
WHERE
V <> LAST_V OR LAST_V IS NULL;
LAST_V是前一行中V的值,由T排序。因此,如果V&lt;&gt; LAST_V表示V与所提出的LAST_V不同。 LAST_V IS NULL表示您位于第一行。
答案 1 :(得分:1)
Declare @YourTable table (Col1 varchar(25),Col2 varchar(25))
Insert Into @YourTable values
('V1','T1'),
('V1','T2'),
('V2','T3'),
('V3','T4')
;with cteBase as (
Select *,RowNr=Row_Number() over(Partition By Col1 Order By Col2 Desc) From @YourTable
)
Select * from cteBase where RowNr=1
返回
Col1 Col2 RowNr
V1 T2 1
V2 T3 1
V3 T4 1
或者您可以使用With Ties条款
Select Top 1 With Ties *
From @YourTable
Order By Row_Number() over(Partition By Col1 Order By Col2 Desc)
返回
Col1 Col2
V1 T2
V2 T3
V3 T4