Получить записи за последние 2 месяца (текущий год) и последний месяц (прошлый год) - PullRequest
0 голосов
/ 07 января 2020

Мне нужно получить записи за последние 2 месяца и за последний месяц (прошлый год) на основе поля таблицы paidDate, используя SQL server 2016.

Предположим, я запускаю запрос 1 февраля / 2 февраля. , 2020. Мне нужны ежемесячные данные за декабрь 2019 года, январь 2020 года, а также за январь 2019 года.

Что за запрос SQL для этого? Можно ли объединить все эти сценарии в один?

Ответы [ 3 ]

2 голосов
/ 07 января 2020

Тогда за предыдущие 2 месяца оплаченная дата будет:
A) Выше или равно первому дню 2 месяцев a go
B) Ниже первого дня текущего месяца.

Аналогично месяцу года go.

Так попробуйте что-то вроде этого:

SELECT *
FROM YourTable
WHERE 
( 
      paidDate >= DATEADD(month, -2, DATEADD(month, DATEDIFF(month, 0, GetDate()), 0))
  AND paidDate <  DATEADD(month, DATEDIFF(month, 0, GetDate()), 0)
)
OR
( 
      paidDate >= DATEADD(month, -13, DATEADD(month, DATEDIFF(month, 0, GetDate()), 0))
  AND paidDate <  DATEADD(year, -1, DATEADD(month, DATEDIFF(month, 0, GetDate()), 0))
)
1 голос
/ 07 января 2020

LukStorm имеет лучший ответ с точки зрения производительности (и я проголосовал за него). Но если вам нужны полные месяцы и вам нет дела до индексации, я бы посоветовал datediff():

where datediff(month, paiddate, getdate()) in (1, 2, 13)

Полученные полные месяцы - это 1 месяц, 2 месяца и 13 месяцев в прошлом. .

1 голос
/ 07 января 2020

Вы можете попробовать логи c, как показано ниже -

SELECT * 
FROM your_table
WHERE 
(
    YEAR(paidDate) = YEAR(DATEADD(MM,-1, getdate())) 
    AND 
    MONTH(paidDate) =  MONTH(DATEADD(MM,-1, getdate()))
)
OR
(
    YEAR(paidDate) = YEAR(DATEADD(MM,-2, getdate())) 
    AND 
    MONTH(paidDate) =  MONTH(DATEADD(MM,-2, getdate()))
)
OR
(
    YEAR(paidDate) = YEAR(DATEADD(MM,-13, getdate())) 
    AND 
    MONTH(paidDate) =  MONTH(DATEADD(MM,-13, getdate()))
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...