2017-01-20 16 views
0

У меня есть ниже набора данных в SQL Server, и мне нужно, чтобы выбрать данные сопоставляются условия ниже:T-SQL: как выбрать строку с несколькими условиями

Во-первых, проверьте, чтобы увидеть, если date_end 1/1/2099, а затем выберите строку, которая имеет наименьшую дней разрыв и skill_group не является Спецназ для строк есть же employee_id, в данном случае это строка 2.

во-вторых, для строк, которые не имеют 1/1/2099 date_end, выберите строку, которая имеет последний день date_end, в этом случае это строка 4.

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 

ответ

1

Есть много способов сделать это. Вот некоторые из них:

top with ties версия:

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 common_table_expression as() использованием row_number() версии:

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 

+0

Спасибо за вашу помощь. – Mixer

 Смежные вопросы

  • Нет связанных вопросов^_^