如何解决根据当天的第一次登录计算员工班次
我想根据他的系统登录时间计算员工班次,我可以根据登录时间计算班次。现在,如果同一天有多次登录,我只想计算给定日期的第一个登录条目的班次。请帮助我如何做到这一点。
**
SQL 查询:
WITH shiftalloence AS
(
SELECT (timesheet.start_time_server),users.first_name + ' ' + users.last_name AS employee_name,CASE
WHEN Dateadd(d,-Datediff(d,dbo.[timesheet].start_time_server),dbo.[timesheet].start_time_server) BETWEEN '05:30:00' AND '08:00:00' THEN 'Morning'
WHEN Dateadd(d,dbo.[timesheet].start_time_server) BETWEEN '08:01:00' AND '11:00:00' THEN 'General'
WHEN Dateadd(d,dbo.[timesheet].start_time_server) BETWEEN '11:05:00' AND '18:00:00' THEN 'Evening'
ELSE '0'
END AS shift
FROM timesheet
JOIN users
ON timesheet.user_id=users.user_id
WHERE Month(start_time_server)=Month(Getdate())
AND Datename(weekday,timesheet.start_time_server) IN 'Monday','Tuesday','Wednesday','Thursday','Friday')
AND
start_time_server NOT IN
(
SELECT timesheet.start_time_server
FROM timesheet
JOIN leaves
ON timesheet.user_id=leaves.user_id
WHERE CONVERT(varchar(10),timesheet.start_time_server,111) =CONVERT(varchar(10),leaves.start_time_server,111)
AND task_type_name IN ('leave','Half Day') )),tt AS
(
SELECT shiftalloence.employee_name,count(
CASE
WHEN shift = 'Morning' THEN 1
ELSE NULL
END) AS 'Morning',count(
CASE
WHEN shift = 'General' THEN 1
ELSE NULL
END) AS 'General',count(
CASE
WHEN shift = 'Evening' THEN 1
ELSE NULL
END) AS 'Evening'
FROM shiftalloence
GROUP BY employee_name )SELECT *
FROM tt
**
解决方法
您能否根据日期简单地按 ASC 或 DESC 选择和订购?这将允许您仅显示您想要的班次/天/ID,并在他们第一次登录时向您显示,因为您已按照您想要的方式订购。
这是有效的,因为如果您返回 3 行并按日期时间 asc/desc 排序,您也可以简单地选择 top(1)。它只会抓取该轮班/天/人的列表中的最高记录。
我所说的小例子:
SELECT TOP 1 * FROM Employees
order by datetime asc;
类似的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。