Получить последнюю запись и предыдущую запись до этого - PullRequest
0 голосов
/ 05 ноября 2019

Мне нужна помощь по оптимизации моего кода. Здесь я хочу выбрать самый последний календарный год и предыдущий календарный год до этого. Предполагая также, что если ScheduleYear 2019 не доступен. Сценарий все равно получит 2018, 2017 год.

select ScheduleYear
from t_year 
where (getutcdate() between yearbegin and yearend OR datepart(yy,getutcdate()) = ScheduleYear
OR ScheduleYear = (SELECT ScheduleYear-1 FROM t_year WHERE getutcdate() between yearbegin and yearend)))
and enabled = 1
order by ScheduleYear DESC

Ответы [ 4 ]

0 голосов
/ 05 ноября 2019

Если ScheduleYear уникально, вы можете использовать:

select top (2) ScheduleYear
from t_year 
where getutcdate() >= yearbegin and enabled = 1
order by ScheduleYear desc;

Если у вас есть дубликаты, тогда используйте select distinct:

select distinct top (2) ScheduleYear
from t_year 
where getutcdate() >= yearbegin and enabled = 1
order by ScheduleYear desc;

Не используйте select distinctбез необходимости, потому что это добавляет накладные расходы на обработку.

0 голосов
/ 05 ноября 2019

Я думаю, что вы можете получить необходимые результаты с помощью top и соответствующего вида:

SELECT TOP 2 
   ScheduleYear 
FROM t_year 
WHERE enabled = 1
ORDER BY ScheduleYear DESC
0 голосов
/ 05 ноября 2019

Я думаю, это то, чего вы хотите достичь.

select top 2 coalesce(ScheduleYear, year(getutcdate())) as ScheduleYear from t_year 
where (ScheduleYear between yearbegin and yearend
    or
        year(getutcdate()) between yearbegin and yearend)
and enabled = 1
order by coalesce(ScheduleYear, year(getutcdate())) desc
0 голосов
/ 05 ноября 2019

Вы просто ищете order by и top?

select top (2) ScheduleYear 
from t_year 
where 
     ScheduleYear <= year(getutcdate()) 
    and enabled = 1
order by ScheduleYear DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...