我想比较属于 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
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