我只想从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
您可以使用LAG窗口功能将一列中的值与上一行的值进行比较。您需要提供PARTITION BY
和ORDER 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