Выбираете 2 набора дат из одного и того же набора данных? - PullRequest
0 голосов
/ 22 апреля 2019

Скажем, у меня есть запрос, который выбирает все продажи за последние 90 дней.Я хочу быть в состоянии изолировать определенные строки в зависимости от случая и времени и не могу понять, как это сделать.Описание случая зависит от даты, поэтому: если дата находится между 3/1 и 5/31, то я хочу выбрать продажи за любой конец месяца (3/31, 4/30, 5/31 и СЕГОДНЯ), в противном случае, если дата не между 3/1 и 5/31, то я просто хочу выбрать последние 3 месяца.

Пока я пытался вставить оператор Case / When в предложение WHERE, но это не кажется кошерным.Есть ли другой способ сделать это?

Для справки, таблица @monthends содержит следующий единственный столбец:

monthends

  • 2019-03-31
  • 2019-02-28
  • 2019-01-31

, а таблица @insideRule содержит аналогично:

insiderRule

  • 2019-03-31
  • 2019-04-22

Запрос:

 SELECT *
   FROM mytable
   WHERE asofdate IN 
     CASE WHEN asofdate BETWEEN '3-1-2019' AND '5-31-2019' THEN
       (SELECT * FROM @insideRule)
     ELSE
       (SELECT * FROM @monthends)
     END 

При выполнении вышеизложенного я получаю синтаксисошибки вокруг "IN"

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Я думаю, вы хотите что-то вроде этого:

SELECT ir.*
FROM @insideRule ir
WHERE getdate() >= '2019-03-01' AND
      getdate() < '2019-06-01'
UNION ALL
SELECT me.*
FROM @monthends me
WHERE getdate() < '2019-03-01' OR
      getdate() >= '2019-06-01';

Предполагается, что две таблицы имеют одинаковые столбцы в одинаковом порядке с совместимыми типами.

0 голосов
/ 22 апреля 2019

Вы хотите exists не case выражение:

IF EXISTS (SELECT 1 FROM mytable WHERE aasofdate BETWEEN '2019-03-01' AND '2019-05-31')
   SELECT *
   FROM @insideRule
   ELSE 
   SELECT * 
   FROM @monthends
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...