Sql server T-SQL:如何选择具有多个条件的行
我在SQL Server中设置了以下数据集,我需要按以下顺序选择具有条件的数据: 首先,检查date_end是否为1/1/2099,然后选择天数间隔最小且skill_group不是SWAT的行,因为该行具有相同的employee_id,在本例中为第2行 其次,对于没有1/1/2099日期结束的行,选择具有最近日期结束的行,在本例中为第4行Sql server T-SQL:如何选择具有多个条件的行,sql-server,tsql,select,conditional-statements,where,Sql Server,Tsql,Select,Conditional Statements,Where,我在SQL Server中设置了以下数据集,我需要按以下顺序选择具有条件的数据: 首先,检查date_end是否为1/1/2099,然后选择天数间隔最小且skill_group不是SWAT的行,因为该行具有相同的employee_id,在本例中为第2行 其次,对于没有1/1/2099日期结束的行,选择具有最近日期结束的行,在本例中为第4行 ID employee_id last_name first_name date_start date_end skill_group ---
ID employee_id last_name first_name date_start date_end skill_group
---------------------------------------------------------------------------
1 N05E0F Mike Pamela 12/19/2013 1/1/2099 SWAT
2 N05E0F Mike Pamela 9/16/2015 1/1/2099 Welcome Team
3 NSH8A David Smith 12/19/2013 9/16/2016 Unlicensed
4 NSH8A David Smith 8/16/2015 10/16/2016 CMT
有很多方法可以做到这一点。以下是其中一些: 版本:
select top 1 with ties
*
from tbl
where skill_group != 'SWAT'
order by
row_number() over (
partition by employee_id
order by date_end desc, datediff(day,date_start,date_end) asc
)
with cte as (
select *
, rn = row_number() over (
partition by employee_id
order by date_end desc, datediff(day,date_start,date_end) asc
)
from tbl
where skill_group != 'SWAT'
)
select *
from cte
where rn = 1
使用版本:
谢谢你的帮助。