T-SQL - порядок запросов по годам, месяцам не работает так, как мне нужно - PullRequest
0 голосов
/ 29 июня 2019

У меня есть этот простой запрос, который должен вернуть список записей, перечисленных в порядке убывания по годам и месяцам, начиная с года и месяца, при условии:

select * 
from mytable 
where year <= @year 
  and month <= @month 
order by year desc, month desc

Проблема в том, что если я укажу год = 2019 и месяц = ​​2, он вернет:

2019,2
2019,1
2018,2
2018,1
2017,2
2017,1 etc

Как вы можете предположить, мне нужно, чтобы оно вернулось вместо:

2019,2
2019,1
2018,12
2018,11
2018,10 etc

Мне не удается понять, как это понять. Есть идеи?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 июня 2019

Вам нужно изменить предложение where:

select t.*
from mytable t
where year < @year or
      (year = @year and month <= @month)
order by year desc, month desc;

Альтернатива будет использовать арифметику, по существу, считая месяцы:

where year * 12 + month <= @year * 12 + @month
0 голосов
/ 29 июня 2019

Следующее делает работу, если ваш год и месяц не являются числовым типом данных:

select 
    * 
from 
    @mytable 
where 
    [year]+case when len(month) = 1 then '0' + month else month end 
    <= @year+case when len(@month) = 1 then '0' + @month else @month end
order by 
    [year]+case when len(month) = 1 then '0' + month else month end desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...