Sql 查询以显示仅在一个月内出现但未在其他月份出现的特定员工姓名
我需要一个sql查询来显示“仅在1月份”但不在2月、3月和4月出现的员工的姓名 以下是表格的详细信息Sql 查询以显示仅在一个月内出现但未在其他月份出现的特定员工姓名,sql,sql-server,Sql,Sql Server,我需要一个sql查询来显示“仅在1月份”但不在2月、3月和4月出现的员工的姓名 以下是表格的详细信息 create table Employee(Id numeric(18,0),Name varchar(255),Date date); insert into Employee values(101,'Shiva','2018/01/01'), (102,'Vamsi','2018/01/01'),
create table Employee(Id numeric(18,0),Name varchar(255),Date date);
insert into Employee values(101,'Shiva','2018/01/01'),
(102,'Vamsi','2018/01/01'),
(103,'Rajesh','2018/01/01'),
(104,'Krishna','2018/01/01'),
(105,'Tarun','2018/02/01'),
(101,'Shiva','2018/02/01'),
(103,'Rajesh','2018/02/01'),
(106,'Kaala','2018/03/02'),
(107,'Azeez','2018/03/02'),
(103,'Rajesh','2018/03/02'),
(108,'Eswar','2018/04/02'),
(109,'Dora','2018/04/02'),
(110,'Akash','2018/04/02'),
(103,'Rajesh','2018/04/02');
预期结果如下:
瓦姆西
克里希纳
希望我能很快得到你的答复
谢谢。试试这个查询
select Name from Employee where MONTH(date)=1
在PostgreSQL中,您可以尝试以下内容。在这里,我选择所有没有行且月份不是一月的员工
SELECT Name
FROM Employee
WHERE Id NOT IN (SELECT Id FROM Employee WHERE date_part('month', Date) != 1);
一种简单的方法是使用聚合。如果您只有一年的数据:
select name
from Employee
group by name
having month(min(date)) = month(max(date)) and
month(min(date)) = 1;
如果您只想要2018年1月:
select name
from Employee
group by name
having min(date) >= '2018-01-01' and
max(date) < '2018-02-01';
选择名称
来自员工
按名称分组
最小值(日期)>='2018-01-01'和
max(日期)<'2018-02-01';
试试这个
SELECT Id,Name,[Date]
FROM
(
SELECT *,
COUNT(Name)OVER(Partition by Name,DATEPART(YEAR,[date]) ORDER BY id)
AS EmpOnlyOnceInMonth
FROM EmployeeData
)dt
WHERE EmpOnlyOnceInMonth=1 AND DATEPART(M,dt.[date])=1
ORDER BY Id
结果
Id Name Date
----------------------
102 Vamsi 2018-01-01
104 Krishna 2018-01-01
您使用的是哪种数据库管理系统?(就日期/时间而言,许多产品远远不符合ANSI SQL。)SQL Server Management Studio 2014使用该示例数据,预期结果是什么?针对未指定dbms的问题的特定于产品的答案。至少告诉我们这是用于哪个dbms的。