SQL,根据组内是否有重复值设置组标记

MSSQL 的表 my_table 有 3 列,Serial_Number是分组字段,Id 和 Last_update_date 是组内明细,但后者可能有重复值


Id

Serial_Number

Last_update_date

1

1

3344

07-05-2024

2

2

3344

02-05-2024

3

3

9098

20-02-2024

4

4

9098

20-02-2024

5

5

2323

07-03-2023

6

6

2323

17-10-2023

7

7

2323

17-10-2023

8

8

1894

10-07-2022

9

9

1894

20-02-2024

10

10

1894

02-05-2024

请给该表增加计算列 Flag,要求是:按Serial_Number分组后,如果本组的Last_update_date有重复值,则本组的 Flag="Y",否则 Flag="N"。


Id

Serial_Number

Last_update_date

Flag

1

1

3344

07-05-2024

N

2

2

3344

02-05-2024

N

3

3

9098

20-02-2024

Y

4

4

9098

20-02-2024

Y

5

5

2323

07-03-2023

Y

6

6

2323

17-10-2023

Y

7

7

2323

17-10-2023

Y

8

8

1894

10-07-2022

N

9

9

1894

20-02-2024

N

10

10

1894

02-05-2024

N

编写SPL代码:


A

1

=mssql1.query("select *,'N'as Flag from my_table")

2

=A1.group@u(Serial_Number).run(if(~.groups(Last_update_date;count(1)).pselect(#2>1),~.run("Y":Flag)))

函数group用于分组(但不汇总),@u表示分组的结果保持原始顺序,groups 用于分组汇总。~表示当前组或当前成员,run用于修改记录。pselect 返回符合条件的成员位置。

来源:https://stackoverflow.com/questions/78456365/column-comparison-between-rows-of-the-same-group-used-in-partition-by-clause