我有这样的表格
PkReferencesID FkReferencesID DocID FKHRSEmployeeID AssignedDate AssignedTime FKActivityID
40855 NULL 8530 13 13920625 0829 1
40856 40855 8530 438 13920625 0829 1
40857 40856 8530 13 13920625 0829 2
40858 40857 8530 438 13920625 0830 1
40859 40858 8530 NULL 13920625 0830 1
NULL NULL NULL NULL NULL NULL NULL
我如何为每个 FKHRSEmployeeID 选择具有 DocID = 8530 且 FKActivityID = 1 和最大分配日期和最大分配时间的行?
注意:每个 FKHRSEmployeeID 的结果应该是一行
任何帮助都将得到赞赏。谢谢
结果一定是这样的
PkReferencesID FkReferencesID DocID FKHRSEmployeeID AssignedDate AssignedTime FKActivityID
40855 空 8530 13 13920625 0829 140858 40857 8530 438 13920625 0830 1
方法是使用 row_number()
:
select t.*
from (select t.*,
row_number() over (partition by FKHRSEmployeeID
order by AssignedDate desc, AssignedTime desc
) as seqnum
from t
where DocID = 8530 and FKActivityID = 1
) t
where seqnum = 1
查询 2 将检索您请求的信息:
查询1:此查询获取每个员工的最大分配日期/时间。
SELECT FKHRSEmployeeID, MAX(AssignedDate & AssignedTime)
FROM Table
WHERE T.DocID=8530
AND T.FKActivityID=1
GROUP BY FKHRSEmployeeID;
查询 2:此查询使用前一个查询仅检索匹配的记录。
SELECT T.*
FROM Table AS T
INNER JOIN Query1 AS Q
ON (T.Date=LEFT(Q.MaxDateTime,8))
AND (T.Time=RIGHT(Q.MaxDateTime,4))
AND (T.FKHRSEmployeeID=Q.FKHRSEmployeeID)
WHERE T.DocID=8530
AND T.FKActivityID=1;
此查询本身并不能保证每个员工只能获得一条记录,除非组合 FKHRSEmployeeID/AssignedDate/AssignedTime 在表中是唯一的。您可以通过基于这些列创建唯一索引来确保这一点。