Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从“打开\关闭”状态列中查找并填充ID相关的上次关闭日期到新列“上次关闭\日期时间”?_Sql_Sql Server - Fatal编程技术网

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;

你试过什么?你在哪里卡住了?我不知道你的问题是什么。您似乎有两个期望的结果集-这使得问题有点宽泛。