Partition By 子句中使用的同一组行之间的列比较

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

我想比较属于 SQL 中的 partition by 子句创建的同一组的相同行的列。我的表有以下数据:

Id  Serial_Number   Last_update_date    Flag
1   3344            07-05-2024          N
2   3344            02-05-2024          N
3   9098            20-02-2024          Y
4   9098            20-02-2024          Y
5   2323            07-03-2023          Y
6   2323            17-10-2023          Y
7   2323            17-10-2023          Y
8   1894            10-07-2022          N
9   1894            20-02-2024          N
10  1894            02-05-2024          N

在上面的数据中,分组应该通过Serial_Number列进行,并且应该检查serial_number中的任何2个日期是否相同,所有组成员的标志应该是Y,否则全部应该是N。 我尝试使用

count(distinct last_update_date) over partition by serial_number
但它不起作用。

with cte (select a.*, count(distinct last_update_date) over partition by serial_number as cnt from my_table a)
select * from cte 
sql sql-server partition
1个回答
0
投票
WITH CTE as 
(  
SELECT *, 
  Row_Number() OVER(PARTITION BY Serial_Number ORDER BY Id) as GroupIndex,
  Row_Number() OVER(ORDER BY Id) as RN,
  (Row_Number() OVER(ORDER BY Id) - Row_Number() OVER(PARTITION BY Serial_Number ORDER BY Id)) as [Group]
FROM my_table
)
SELECT [Group], Last_update_date , count(*) as DateCount
FROM cte
GROUP BY [Group], Last_update_date
HAVING Count(*) > 1  
Order BY [Group], Last_update_date
© www.soinside.com 2019 - 2024. All rights reserved.