[英]How to get every nth row value in sql
I have a select statement in sql:我在 sql 中有一个 select 语句:
SELECT DISTINCT [Year] FROM [data_list] ORDER BY [YEAR] ASC;
Result:结果:
Year
----
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
I want list of year in 3 increments.我想要以 3 为增量的年份列表。 For example:例如:
Year
----
2019
2022
2025
2028
One way to do it is to use a common table expression with dense_rank, and then filter the results by it.一种方法是使用带 dense_rank 的公共表表达式,然后通过它过滤结果。
First, create and populate sample table ( Please save us this step in your future questions):首先,创建并填充示例表(请在以后的问题中保存我们这一步):
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);
The cte and query: 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]
results:结果:
Year
2019
2022
2025
2028
You can use ROW_NUMBER
:您可以使用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
Try it,试试看,
;WITH CTEs AS
(
SELECT *,(CASE WHEN [Year] %3 =0 THEN [Year] END) AS [Year] FROM yourTable
)
SELECT * FROM CTEs WHERE [Year] IS NOT NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.