我需要一个SQL查询来显示“仅在一月”出现但没有出现在2月,3月和4月的员工姓名。
这是表格的详细信息...
valid_to = time()
预期结果如下:
Vamsi
克里希纳
希望我很快会收到您的答复 谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
在PostgreSQL中,您可以尝试这样的事情。在这里,我选择所有没有一月不是一月的行的员工。
SELECT Name
FROM Employee
WHERE Id NOT IN (SELECT Id FROM Employee WHERE date_part('month', Date) != 1);
答案 2 :(得分:0)
一种简单的方法是使用聚合。如果您只有一年的数据:
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';
答案 3 :(得分:0)
尝试一下
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