Sql 如何从“打开\关闭”状态列中查找并填充ID相关的上次关闭日期到新列“上次关闭\日期时间”?
请参阅示例数据集和预期结果输出 样本数据集:-Sql 如何从“打开\关闭”状态列中查找并填充ID相关的上次关闭日期到新列“上次关闭\日期时间”?,sql,sql-server,Sql,Sql Server,请参阅示例数据集和预期结果输出 样本数据集:- ID Status Date Amount Open_Close 1 New 01/05/20 20 Open 1 Removed 02/05/20 30 Close 1 New 02/05/20 50 Open 1 In-Progress 03/05/20 20 Open 1 Fixed 04/05/2
ID Status Date Amount Open_Close
1 New 01/05/20 20 Open
1 Removed 02/05/20 30 Close
1 New 02/05/20 50 Open
1 In-Progress 03/05/20 20 Open
1 Fixed 04/05/20 50 Close
2 New 05/05/20 30 Open
2 Removed 05/05/20 20 Close
3 New 05/05/20 30 Open
3 Assigned 05/05/20 50 Open
3 In-Progress 05/05/20 20 Open
3 Fixed 09/05/20 50 Close
4 New 12/05/20 20 Open
4 Assigned 13/05/20 30 Open
4 Fixed 13/05/20 20 Close
预期成果:-
ID Status Date Amount Open_Close Last Close Date
1 New 01/05/20 20 Open 04/05/20
1 Removed 02/05/20 30 Close 04/05/20
1 New 02/05/20 50 Open 04/05/20
1 In-Progress 03/05/20 20 Open 04/05/20
1 Fixed 04/05/20 50 Close 04/05/20
2 New 05/05/20 30 Open 05/05/20
2 Removed 05/05/20 20 Close 05/05/20
3 New 05/05/20 30 Open 09/05/20
3 Assigned 05/05/20 50 Open 09/05/20
3 In-Progress 05/05/20 20 Open 09/05/20
3 Fixed 09/05/20 50 Close 09/05/20
4 New 12/05/20 20 Open 13/05/20
4 Assigned 13/05/20 30 Open 13/05/20
4 Fixed 13/05/20 20 Close 13/05/20
ID Status Date Amount Open_Close Flip_count
1 New 01/05/20 20 Open 3
1 Removed 02/05/20 30 Close 3
1 New 02/05/20 50 Open 3
1 In-Progress 03/05/20 20 Open 3
1 Fixed 04/05/20 50 Close 3
2 New 05/05/20 30 Open 2
2 Removed 05/05/20 20 Close 2
3 New 05/05/20 30 Open 2
3 Assigned 05/05/20 50 Open 2
3 In-Progress 05/05/20 20 Open 2
3 Fixed 09/05/20 50 Close 2
4 New 12/05/20 20 Open 2
4 Assigned 13/05/20 30 Open 2
4 Fixed 13/05/20 20 Close 2
为了确定最后一个关闭日期,则需要获取状态从打开更改为关闭时的计数,计数为1,如果持续打开,则需要忽略该计数
例如:-
预期成果:-
ID Status Date Amount Open_Close Last Close Date
1 New 01/05/20 20 Open 04/05/20
1 Removed 02/05/20 30 Close 04/05/20
1 New 02/05/20 50 Open 04/05/20
1 In-Progress 03/05/20 20 Open 04/05/20
1 Fixed 04/05/20 50 Close 04/05/20
2 New 05/05/20 30 Open 05/05/20
2 Removed 05/05/20 20 Close 05/05/20
3 New 05/05/20 30 Open 09/05/20
3 Assigned 05/05/20 50 Open 09/05/20
3 In-Progress 05/05/20 20 Open 09/05/20
3 Fixed 09/05/20 50 Close 09/05/20
4 New 12/05/20 20 Open 13/05/20
4 Assigned 13/05/20 30 Open 13/05/20
4 Fixed 13/05/20 20 Close 13/05/20
ID Status Date Amount Open_Close Flip_count
1 New 01/05/20 20 Open 3
1 Removed 02/05/20 30 Close 3
1 New 02/05/20 50 Open 3
1 In-Progress 03/05/20 20 Open 3
1 Fixed 04/05/20 50 Close 3
2 New 05/05/20 30 Open 2
2 Removed 05/05/20 20 Close 2
3 New 05/05/20 30 Open 2
3 Assigned 05/05/20 50 Open 2
3 In-Progress 05/05/20 20 Open 2
3 Fixed 09/05/20 50 Close 2
4 New 12/05/20 20 Open 2
4 Assigned 13/05/20 30 Open 2
4 Fixed 13/05/20 20 Close 2
提前谢谢 您可以使用窗口功能:
select t.*,
max(case when open_close = 'Close' then date end) over (partition by id) as lastclosedate
from table t;
你试过什么?你在哪里卡住了?我不知道你的问题是什么。您似乎有两个期望的结果集-这使得问题有点宽泛。