Member 13366575 Ответов: 2

Как выбрать имя за последние 5 месяцев между конкретной датой в SQL


Здравствуйте, я хотел получить список последних 5 месяцев имени с текущей даты. И используя приведенный ниже sql-запрос, я получаю его, но здесь я хотел получить список между конкретной датой, как получить список последних 5 месяцев между конкретной датой.

Что я уже пробовал:

;with cte as
(select 0 as num
union all
select num+1 from cte where num<4)
select month(dates) as MonthID,datename(month,dates) as MonthName,year(dates) Year,datename(m,dates)+' '+cast(datepart(yyyy,dates) as varchar) as MonthYearName
from (select dateadd(mm,-num,DATEADD(dd,1,eomonth(getdate(),-1))) as dates from cte) A

2 Ответов

Рейтинг:
1

CHill60

Вместо того чтобы использовать числа в вашей последовательности cte, а затем выполнять подзапрос, просто используйте даты. Затем вы можете иметь начальную и конечную даты в качестве переменных. например, вот так

declare @startdate date = '2018-FEB-01'
declare @enddate date = '2018-NOV-10'

;WITH cte AS
(
    SELECT  @startdate AS num
    UNION ALL
    SELECT  dateadd(mm, 1, num)
    FROM    cte
    WHERE dateadd(mm, 1, num) < @enddate
)
SELECT  month(num) as MonthID, 
        datename(month, num) as MonthName, 
        year(num) as [Year], 
        datename(m,num)+' '+cast(datepart(yyyy,num) as varchar) as MonthYearName
FROM    cte 
order by month(num) desc


Рейтинг:
0

W∴ Balboos, GHB

Если я правильно понял ваш вопрос, смотрите: SQL между операторами[^]

Если вам это нужно, чтобы продолжать меняться с каждым днем, также посмотрите на: Функция SQL Server DATEADD() [^] и таким образом автоматически выбрать скользящий диапазон дат на основе текущей даты из getdate()