Как выбрать годы и кварталы между 2 разными годами и 2 разными кварталами? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть эта таблица:

year    | quarter
2018    | 1
2018    | 2
2018    | 3
2018    | 4
2019    | 1
2019    | 2
2019    | 3
2019    | 4

Мне нужно выбрать все данные из этой таблицы, которые будут находиться между периодом 2 квартала 2018 года и кварталом 2019 года 3

Я понял, что только выбордля даты начала:

SELECT  *
FROM    [usa].[dbo].[tmpDate]
WHERE   year != 2018
OR      quarter >= 2

, которая возвращает меня:

year    | quarter
2018    | 2
2018    | 3
2018    | 4
2019    | 1
2019    | 2
2019    | 3
2019    | 4

Что нужно выбрать, чтобы получить:

year    | quarter
2018    | 2
2018    | 3
2018    | 4
2019    | 1
2019    | 2
2019    | 3

Ответы [ 3 ]

2 голосов
/ 18 апреля 2019

Один из возможных подходов - сделать небольшой расчет со значениями year и quarter:

-- Table
CREATE TABLE #Data (
   [year] int,
   [quarter] int
)
INSERT INTO #Data
   ([year], [quarter])
VALUES   
   (2018, 1),
   (2018, 2),
   (2018, 3), 
   (2018, 4), 
   (2019, 1), 
   (2019, 2), 
   (2019, 3), 
   (2019, 4)

-- Statement
SELECT *
FROM #Data
WHERE ([year] * 10 + [quarter]) BETWEEN 20182 AND 20193
ORDER BY [year], [quarter]

Выход:

----------------
year    quarter
----------------
2018    2
2018    3
2018    4
2019    1
2019    2
2019    3
2 голосов
/ 18 апреля 2019

Вы можете использовать следующий запрос для получения ожидаемого результата:

SELECT * 
FROM [usa].[dbo].[tmpDate] 
WHERE (year = 2018 AND quarter >= 2) OR
      (year = 2019 AND quarter <= 3);

Демо с примерами данных:

DECLARE @TempData TABLE ([year] INT, [quarter] INT);

INSERT INTO @TempData ([year], [quarter]) VALUES
(2018, 1),
(2018, 2),
(2018, 3),
(2018, 4),
(2019, 1),
(2019, 2),
(2019, 3),
(2019, 4);

SELECT * 
FROM @TempData
WHERE ([year] = 2018 AND [quarter] >= 2) OR
      ([year] = 2019 AND [quarter] <= 3);

Выход:

year    quarter
---------------
2018    2
2018    3
2018    4
2019    1
2019    2
2019    3
0 голосов
/ 18 апреля 2019

Брекеты играют важную роль в предложении WHERE.Попробуйте следующее и дайте мне знать, если это работает:

SELECT * 
FROM YourTable 
WHERE (year = 2018 AND quarter >= 2) 
      OR (year = 2019 AND quarter <= 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...