简体   繁体   English

如何获取 sql 中的每 n 行值

[英]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

demo on dbfiddle.uk dbfiddle.uk 上的演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM