Как получить значение каждой n-й строки в sql - PullRequest
1 голос
/ 24 октября 2019

У меня есть оператор выбора в sql:

SELECT DISTINCT [Year] FROM [data_list] ORDER BY [YEAR] ASC;

Результат:

Year
----
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028

Я хочу список года с тремя приращениями. Например:

Year
----
2019
2022
2025
2028

Ответы [ 3 ]

4 голосов
/ 24 октября 2019

Один из способов сделать это состоит в том, чтобы использовать общее табличное выражение с dens_rank, а затем отфильтровать результаты по нему.

Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните насшаг в ваших будущих вопросах):

DECLARE @T AS TABLE
(
    [Year] int
)

INSERT INTO @T ([Year]) VALUES
(2019),
(2019),
(2019),
(2020),
(2020),
(2021),
(2022),
(2022),
(2023),
(2024),
(2024),
(2025),
(2025),
(2026),
(2027),
(2027),
(2028);

Cte и запрос:

WITH CTE AS
(
    SELECT [Year],
            DENSE_RANK() OVER(ORDER BY [Year]) - 1 As dr
    FROM @T
)

SELECT DISTINCT [Year]
FROM CTE
WHERE dr % 3 = 0
ORDER BY [Year]

результаты:

Year
2019
2022
2025
2028
3 голосов
/ 24 октября 2019

Вы можете использовать ROW_NUMBER:

SELECT [Year] 
FROM (
  SELECT [Year], ROW_NUMBER() OVER (ORDER BY [Year] ASC) rn 
  FROM table_name
  GROUP BY [YEAR]
) t WHERE (t.rn - 1) % 3 = 0

демо на dbfiddle.uk

0 голосов
/ 24 октября 2019

Попробуй,

;WITH CTEs AS 
(
    SELECT *,(CASE WHEN [Year] %3 =0 THEN [Year] END) AS [Year] FROM yourTable
)
SELECT * FROM CTEs WHERE [Year] IS NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...