我被要求提供最长持续时间的每日报告;计算应从最后采取的行动开始,并以当前日期结束尚未最终确定的请求(即接受,拒绝)。
我的表基本上有以下内容:
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 |
+-----------+-----------+----------+--------------+
非常感谢您的帮助
答案 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]