Sql 根据给定值后是否存在特定值进行选择
我有一个“用户”表,如下所示Sql 根据给定值后是否存在特定值进行选择,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个“用户”表,如下所示 UserID Status Effective Date ------------------------------------------- 0111 Rehire 5 Apr 2021 0111 Resign 4 Apr 2021 0111 Transfer 10 Mar 2021 0111 Hire 5 Aug 2014 0
UserID Status Effective Date
-------------------------------------------
0111 Rehire 5 Apr 2021
0111 Resign 4 Apr 2021
0111 Transfer 10 Mar 2021
0111 Hire 5 Aug 2014
0112 PayrollChange 4 Apr 2021
0112 Resign 3 Apr 2021
0112 Hire 1 Jul 2001
0113 Resign withdraw 3 Apr 2021
0113 Resign 1 Apr 2021
0113 Transfer 1 Nov 2019
0113 Hire 10 Aug 2007
我想创建一个SQL查询来识别那些辞职的用户,这些用户不需要是最新的记录,但不需要重新雇用或撤回辞职。考虑到员工可以辞职并多次退出。需要根据有效日期考虑。如何创建这样的脚本
预期产量
UserID Status Effective Date
-------------------------------------------
0112 Resign 3 Apr 2021
请帮我做同样的事情
注意:我已经尝试了多次,但无法找到正确的查询。因此发布了这篇文章
提前感谢。尝试以下查询:
SELECT *
FROM Users U1
WHERE U1.Status = 'Resign'
AND NOT EXISTS (SELECT 1
FROM Users U2
wHERE U2.UserId = U1.UserId
AND U2.Status IN ('Rehire', 'Resign withdraw'))
因此,这里有一种方法可以尝试,如果您只想找到任何状态为“辞职”的用户,但排除任何状态为“重新雇用”或“辞职-退出”的用户,您只需为每个用户分配一个合适的值,并为每个用户求和,然后进行相应的筛选;生效日期将始终是具有所需状态的最近日期。如果有合适的索引,这将是性能更好的查询
select UserId, 'Resign' Status, EffectiveDate from (
select
Sum(case when status in ('Rehire','Resign withdraw') then 1000 when status='Resign' then 1 else 0 end) Stot,
Max( case when status='resign' then Effectivedate end) EffectiveDate,
UserId
from T
where Status in ('Rehire', 'Resign withdraw', 'Resign' )
group by UserId
)x
where Stot>0 and Stot<1000
我想创建一个SQL查询来识别那些辞职的用户,这些用户不需要是最新的记录,但不需要重新雇用或撤回辞职
如果我理解正确,您希望将辞职日期的最大值与其他日期的最大值进行比较:
select userId, 'Resign',
max(case when status = 'Resign' then EffectiveDate end)
from t
where max(case when status = 'Resign' then EffectiveDate end) > max(case when status in ('Rehire', 'Resign withdraw') then EffectiveDate end) or
max(case when status in ('Rehire', 'Resign withdraw') then EffectiveDate end) is null;
@DaleK我试过多次,也试过多次查询。无法得出正确的答案。因此张贴。你需要显示你的尝试,以便我们可以看到你尝试了什么。我已经尝试了这个。还是不走运。你能阅读我编辑的问题吗?你的不在应该在,因为你有一个不在exists@Stu你说得对。谢谢大家!@呃。如果用户多次辞职而没有重新雇用,或者在辞职后撤回辞职,则可能会返回重复的结果。