我想查询一个employee
一年是否有超过14个假期的查询。我想做一个trigger
。重要的是,这总共需要14天。但是employee
可能在一个月中有4天,而在另一个月中有10天。他不需要一劳永逸。
我有这样的查询(查询),我正在使用SQL Server
select employeeid
from time
where datediff(day, dateStart, dateEnd) >=1
and year(dateEnd) = 2018
and timecat= 'vacationdays'
group by employeeid
having count(*) >=13
我认为我可以使用datediff并将其计数为13次。但这不起作用。
答案 0 :(得分:1)
您需要对日期差求和:
select employeeid, sum(datediff(day, dateStart, dateEnd) + 1) AS total
from time
where year(dateEnd) = 2018
and timecat= 'vacationdays'
group by employeeid
having SUM(datediff(day, dateStart, dateEnd) + 1) > 14
请考虑+1
中的SUM
,因为datediff
返回1
的日期是两个日期,例如'2018-11-16'
和'2018-11-17'
,但是如果这些是{ {1}}和dateStart
您希望结果为dateEnd
。
仍然存在一个问题:如果2
和dateStart
不是同一年的日期会发生什么!
答案 1 :(得分:0)
Count(*)仅计算行数。 这意味着如果有一个雇员在10天之一和4天之一中有两次休假,(我假设)这只是表中两行,而star则返回2。
您可以使用函数SUM()
select employeeid, sum( datediff(day, dateStart, dateEnd) ) as sum
from time
where datediff(day, dateStart, dateEnd) >=1
and year(dateEnd) = 2018
and timecat= 'vacationdays'
group by employeeid
having sum >=13
我不知道您的表的结构,因此我不确定查询是否正确,但是这里有更多有用的链接。