我有一個列值和時間戳的表。這些值每秒都在進來。所以,我有數據如下在SQL中如何不選擇列值與其上一行中的行相同的行
V1 T1
V1 T2
V2 T3
V3 T4..
等。所以時間戳將保持增長,但值可以是相同的,他們不會改變。 我想只選擇其中值不同於上一行的行。 所以我想減少數據並只選擇數據發生變化的記錄。 有人會知道如何做到這一點?
我有一個列值和時間戳的表。這些值每秒都在進來。所以,我有數據如下在SQL中如何不選擇列值與其上一行中的行相同的行
V1 T1
V1 T2
V2 T3
V3 T4..
等。所以時間戳將保持增長,但值可以是相同的,他們不會改變。 我想只選擇其中值不同於上一行的行。 所以我想減少數據並只選擇數據發生變化的記錄。 有人會知道如何做到這一點?
這僅適用於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 <> LAST_V這意味着V是不一樣的LAST_V這是問了什麼。 LAST_V爲NULL的情況意味着您位於第一行。
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
或者你可以用與領帶條款
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
我不認爲分區會在這裏工作。您只需根據當前行的值檢查上一行或下一行的值。 –
@vkp你很可能是正確的。我可能誤解了要求 –
我刪除了'mysql'標籤。使用正在使用的數據庫更正標籤。 –
@vkp你是怎麼知道要刪除哪一個的? – Strawberry
窗口功能,LEAD和LAG。 – DVT