获得每个状态的最大持续时间

时间:2017-01-19 05:11:58

标签: sql-server

我被要求提供最长持续时间的每日报告;计算应从最后采取的行动开始,并以当前日期结束尚未最终确定的请求(即接受,拒绝)。

我的表基本上有以下内容:

HitoryID |    RequestID   | Action Taken | StatusID 

所以我开始为每个请求获取最后一个操作日期,并使用datediff来获取最大值;但是,当我按requestID和状态ID进行分组时,它会为所有记录提供不是每个状态的最大值。我们有6种不同的状态:

1- Not sunmitted
2- Submitted
3- Assigned
4- Reviewed
5 - Accepted
6- Rejected

所以我最终应该拥有3条记录(因为我没有计算最终请求)所有记录的最长时间

样本数据

+-----------+-----------+----------+--------------+
| HistoryID | RequestID | StatusID | Action Taken |
+-----------+-----------+----------+--------------+
|         1 |         1 |        1 | 2/2/2014     |
|         2 |         1 |        2 | 2/2/2014     |
|         3 |         1 |        3 | 2/2/2014     |
|         4 |         1 |        4 | 2/5/2014     |
|         5 |         1 |        5 | 2/4/2014     |
|         6 |         2 |        1 | 12/19/2013   |
|         7 |         2 |        2 | 12/18/2013   |
|         8 |         2 |        3 | 12/18/2013   |
|         9 |         2 |        4 | 12/17/2013   |
|        10 |         2 |        6 | 12/17/2013   |
+-----------+-----------+----------+--------------+

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

尝试这种方式..我已经为每个RequestId准备了一个具有最大动作的集合并将其连接到表格。

SELECT T1.HitoryID,REQ_MX.RequestID, REQ_MX.[Action Taken], T1.StatusID
FROM TABLE1 T1
INNER JOIN 
(
SELECT RequestID,MAX([Action Taken]) [Action Taken] FROM TABLE1
GROUP BY RequestID
)REQ_MX ON T1.RequestID = REQ_MX.RequestID 
AND T1.[Action Taken]= REQ_MX.[Action Taken]

修改

  

如何获取每个状态的最大值并获取相关信息

与上述方法相同

SELECT T1.HitoryID,REQ_MX.RequestID, REQ_MX.[StatusID],T1.[Action Taken]
FROM TABLE1 T1
INNER JOIN 
(
SELECT RequestID,MAX([StatusID])as [StatusID] FROM TABLE1
GROUP BY RequestID
)REQ_MX ON T1.RequestID = REQ_MX.RequestID 
AND T1.[StatusID]= REQ_MX.[StatusID]