这是一张桌子
id | year
1 2020
2 2020
3 2020
1 2019
2 2019
3 2019我试着按年分组,结果是
id | year
1 2020
1 2019但我需要为id获取不同的值
预期:
id | year
1 2020
2 2019(或)
id | year
1 2020
3 2019我尝试使用这个mysql查询
select * from table group by year
发布于 2020-02-13 16:28:31
如果不使用分析函数,这可能会很棘手,但是如果您使用的是MySQL 8+,那么有一种方法:
WITH cte AS (
SELECT id, year, DENSE_RANK() OVER (ORDER BY year) dr,
ROW_NUMBER() OVER (PARTITION BY year ORDER BY id) rn
FROM yourTable
)
SELECT id, year
FROM cte
WHERE dr = rn;
作为一个解释,下面是一个关于没有任何WHERE子句的完整CTE的查询:

请注意,每个年份记录块都有从1开始的dr编号,而在每个年份记录块中,rn列从1开始编号。我们保留行数和密集秩相同的行。
https://stackoverflow.com/questions/60212462
复制相似问题