*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://c.scudata.com/article/1722931376048
考虑用组内判断 .count(Last_update_date)>.icount(Last_update_date)