我的工作流程应用程序有一个批准历史记录表,其中包含以下结构以及一些垃圾数据:
表格:[批准] + -------------------------------------- + ----- -+ ---------------- + ------------------------- + | ID |状态| 用户名| 日期戳| + -------------------------------------- + ------- +- -------------- + ------------------------- + | 63DDD358-EF3B-4355-8251-00CDE8560B3E | 5 |用户1 | 2014-12-09 11:53:40.423 | | 63DDD358-EF3B-4355-8251-00CDE8560B3E | 10 |用户1 | 2014-12-09 11:53:40.423 | | 13F65DDC-73D8-48BB-87F4-0207DE47A6D9 | 5 |用户2 | 2016-02-19 11:10:56.820 | | 13F65DDC-73D8-48BB-87F4-0207DE47A6D9 | 10 |用户3 | 2016-02-19 11:10:56.820 | | 5AB3C39E-8E2E-4935-BC6C-0226F444D7F2 | 5 |用户1 | 2014-09-18 14:53:07.973 | | 5AB3C39E-8E2E-4935-BC6C-0226F444D7F2 | 20 | User3 | 2014-09-18 14:56:07.177 | | 5AB3C39E-8E2E-4935-BC6C-0226F444D7F2 | 60 |用户1 | 2014-09-18 14:53:07.973 | | 5AB3C39E-8E2E-4935-BC6C-0226F444D7F2 | 70 |用户1 | 2014-09-18 14:56:08.177 | | 5AB3C39E-8E2E-4935-BC6C-0226F444D7F2 | 70 |用户1 | 2014-10-15 15:17:49.210 | | 5AB3C39E-8E2E-4935-BC6C-0226F444D7F2 | 90 | 系统| 2014-10-15 15:17:50.210 | + -------------------------------------- + ------- +- -------------- + ------------------------- +
状态代码全部表示批准级别,已完成90,已取消99。
我需要在对数据进行分组时找到最上面的行,以查找尚未完成或取消的正在等待批准的请求。然后,这将用于发送电子邮件,提醒用户尚未批准
到目前为止,我有这个查询:
SELECT a.ID,a.Status,a.ApproverID,A.DateTime FROM批准内部 联接 ( SELECT MAX(DateTime)作为MaxDate,Status from Approval WHERE状态不在(90,99) GROUP BY状态中 )a1在a1上。 MaxDate = a.DateTime和a1.Status = a.Status
这会将数据分组,并为我提供最新记录,但它不会忽略任何已完成或已取消的内容。
谁能发现我要去哪里错了?
SELECT *
FROM
(
SELECT a.ID,a.Status,a.ApproverID,A.DateTime,
RN = ROW_NUMBER() OVER (PARTITION BY a.ID ORDER BY A.DateTime DESC)
FROM Approval a
WHERE NOT EXISTS
(
SELECT *
FROM Approval x
WHERE x.ID = a.ID
AND x.Status in (90, 99)
)
) A
WHERE A.RN = 1
RN = 1将为您提供ID的最新记录
NOT EXISTS()将排除状态为90或99的ID
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句