Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据给定值后是否存在特定值进行选择_Sql_Sql Server_Tsql - Fatal编程技术网

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你说得对。谢谢大家!@呃。如果用户多次辞职而没有重新雇用,或者在辞职后撤回辞职,则可能会返回重复的结果。