gpt4 book ai didi

sql - 如何找到一天中的第一次和最后一次时间

转载 作者:行者123 更新时间:2023-12-02 05:14:43 25 4
gpt4 key购买 nike

我有一个查询,它获取部门中第一个打卡的人和最后打卡的部门的人。从本质上讲,这向我展示了谁打开了一个位置,谁关闭了一个位置。下面是我使用“OVER”函数的查询,但是 over 函数不适用于 VB.net 中的数据集是否有任何其他选项可以替换 over 函数?

SELECT * FROM (
SELECT timeclock.dtTimeIn, timeclock.dtTimeOut, employees.sfirstname,
RANK() OVER ( ORDER BY dtTimeIn) rk1, --earliest record gets 1
RANK() OVER (ORDER BY dtTimeOut DESC) rk2 --latest record gets 1

FROM TimeClock INNER JOIN
Employees ON TimeClock.lEmployeeID = Employees.lEmployeeID
WHERE (dtTimeIn > dateadd(day, datediff(day, 0, getdate())-1, 0)) AND (dtTimeOut < dateadd(day, datediff(day, 0, getdate()), 0)) AND
(sDept IN ('1', '2', '3'))
) A
WHERE rk2=1

最佳答案

你可以试试这个:

SELECT  tc.dtTimeIn
, tc.dtTimeOut
, e.sfirstname
FROM TimeClock tc
JOIN Employees e ON tc.lEmployeeID = e.lEmployeeID
JOIN (
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, tc.dtTimeIn), 0) _date
, MIN(tc.dtTimeIn) dtTimeIn
, MAX(tc.dtTimeOut) dtTimeOut
FROM TimeClock tc
WHERE e.sDept IN ('1', '2', '3')
GROUP BY
DATEADD(DAY, DATEDIFF(DAY, 0, tc.dtTimeIn), 0)
) t ON t._date = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
AND DATEADD(DAY, DATEDIFF(DAY, 0, tc.dtTimeIn), 0) = t._date
AND (t.dtTimeIn = tc.dtTimeIn OR t.dtTimeOut = tc.dtTimeOut)
WHERE e.sDept IN ('1', '2', '3')

关于sql - 如何找到一天中的第一次和最后一次时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com