SQL:仅从上一个值中更改选择值

问题描述 投票:-1回答:1

我只想从Microsoft SQL Server的表中选择一个值,仅在该表中的上一个实际值有实际变化的地方。下面的示例:

假设下面的名称为表A:

Account #     Tier     Date
10000         1        1/1/2020
10000         1        1/2/2020
10000         1        1/3/2020
10000         2        2/1/2020
10000         2        2/2/2020
10000         3        3/1/2020
10000         2        4/1/2020

我想返回以下内容:

Account #     Tier     Date
10000         1        1/1/2020
10000         2        2/1/2020
10000         3        3/1/2020
10000         2        4/1/2020
sql sql-server
1个回答
1
投票

您可以使用LAG窗口功能将一列中的值与上一行的值进行比较。您需要提供PARTITION BYORDER BY参数,以便窗口函数知道就比较而言,哪一行应该是previous行。在此示例中,分区是Account #列,排序依据是date列。如果当前行和上一行的tier列的值不同,则该行将包含在输出中。 Fiddle.

;WITH cte AS (
    SELECT *, LAG(Tier) OVER (PARTITION BY [Account #] ORDER BY date) LastTier 
    FROM @t 
)
SELECT cte.[Account #],
       cte.Tier,
       cte.Date
FROM cte 
WHERE cte.Tier <> cte.LastTier OR cte.LastTier IS NULL
© www.soinside.com 2019 - 2024. All rights reserved.