Sql 根据员工的入职日期,如何计算特定日期的可用员工总数?
我使用的是Sql 根据员工的入职日期,如何计算特定日期的可用员工总数?,sql,sql-server,tsql,date,Sql,Sql Server,Tsql,Date,我使用的是SQLServer2012,我的数据库中有一个名为Employee的表。 假设它只有3列,即EmpID,Dept,DateOfEntry,dateleft,那么将给出截至2017-05-31的员工计数的SQL查询语法是什么 表中的每一行代表一名员工 以下是Employee表的状态: EmpId Dept DateOfEntry DateLeft 100 F&B 2015-06-05 2016-01-02 125 Kitchen
SQLServer2012
,我的数据库中有一个名为Employee
的表。
假设它只有3列,即EmpID
,Dept
,DateOfEntry
,dateleft
,那么将给出截至2017-05-31的员工计数的SQL
查询语法是什么
表中的每一行代表一名员工
以下是Employee
表的状态:
EmpId Dept DateOfEntry DateLeft
100 F&B 2015-06-05 2016-01-02
125 Kitchen 2016-02-12 2016-03-10
151 Finance 2018-05-03 NULL
...
更新:对上表中缺少DateLeft列表示歉意。我已相应地更新了问题。如果您想在一个日期内完成,请尝试以下操作:
select count(EmpID) from employee
where DateOfEntry>='31-may-2017' and (dateleft is null or dateleft< getdate())
从员工中选择计数(EmpID)
其中DateOfEntry>='2017年5月31日'和(dateleft为null或dateleft
您可以计算截至该日期正在工作的员工,对吗?意味着他们应该在当天或之前进入:
select count(*)
from employees
where DateOfEntry <= '20170531' and
(dateLeft is null OR dateLeft >= '20170531');
选择计数(*)
来自员工
其中DateOfEntry='20170531');
注意:如果您不接受此人在其约会左侧工作,请将>=更改为> 选择count(*),部门来自员工,其中“2017年5月31日”>入境日期
select count(*),dept from employee where '31-may-2017'>DateOfEntry
and '31_-may-2017'<DateOfLeft group by dept;
“2017年5月31日”看来OP不会发布他们的尝试
这是一个非常简单的查询,如果使用一点Google/Bing/Yahoo,您可能会发现如何使用带有大于(
)和小于(=
或DateLeft为空);
您尝试过什么?显示您当前的查询尝试。考虑到他们没有休假日期,这是否意味着一旦他们加入,他们就永远不能离开?@Larnu我非常抱歉。是的,它确实有一个列来表示左日期!!我正在更新问题。你到底面临什么问题?由于既有输入日期也有退出日期,因此查询将非常简单。你写了什么疑问?为什么它对你不起作用?你仍然需要添加你已经尝试过的东西。您有足够的声誉,知道在提问时提供您尝试过的内容非常重要。使用OP的样本数据,结果将为0。这并没有给出一个基于OP描述的结果。在我看来,该表中的数据更多,因为。。。。。而且他的问题是在某个特定的日期,这就是为什么我用这种方式回答。虽然你已经更新了你的尝试,但这仍然不起作用。如果一名员工在2000-01-01
加入,并且离开日期为'2018-08-16'
的话,他将一直在2017-05-31
工作,但是,您的查询会给他们打折扣。GETDATE()
恐怕也不是正确答案。:)谢谢我错过了问题中的DateLeft一栏。我已相应地更新了问题。感谢更新您的答案。@user3115933,编辑了我的答案以将dateLeft考虑在内。虽然此代码可能(也可能不会)解决问题,但一个好的答案应该始终解释问题是如何解决的以及代码的作用。
DECLARE @Date date;
SET @Date = '20170531';
SELECT COUNT(*) AS Employees
FROM YourTable
WHERE DateOfEntry <= @Date
AND (DateLeft > @Date --I assume that they are no longer emplyed on the day they leave, other use >=
OR DateLeft IS NULL);