Вы можете использовать TOP 1 WITH TIES
с оператором CASE
.
select top 1 with ties
*
from YourTable
order by
case
when (select count(distinct ActionType) from @table) = 1
then row_number() over (order by ActionDate asc)
else row_number() over (order by ActionDate desc)
end
Или в подзапросе, если вам это нравится лучше ...
select ActionDate, ActionType
from
(select
*,
RN = case
when (select count(distinct ActionType) from @table) = 1
then row_number() over (order by ActionDate asc)
else row_number() over (order by ActionDate desc)
end
from YourTable) x
where RN = 1
Это предполагает пустоена самом деле NULL
, который игнорируется в COUNT DISTINCT
.Если вместо NULL
это пробел, вам нужно обработать его с помощью дополнительного CASE
или IIF
или чего-либо подобного:
select top 1 with ties
*
from YourTable
order by
case
when (select count(distinct case when ActionType = '' then null else ActionType end) from @table) = 1
then row_number() over (order by ActionDate asc)
else row_number() over (order by ActionDate desc)
end