gpt4 book ai didi

MySQL:使用组的最早日期来确定每行的排名

转载 作者:行者123 更新时间:2023-11-29 11:09:15 24 4
gpt4 key购买 nike

我想根据最早的日期对行进行排名。但是,如果行的兄弟行(同一组内的行)具有更高的排名,这将影响其排名。

id  | group | date 
1 11 2016-12-1
2 11 2016-01-1
3 22 2016-02-1
4 22 2016-05-1
5 3 2016-04-1
6 3 2016-06-1

目前:

SELECT *, @curRank := @curRank + 1 AS rank 
FROM table
SELECT @curRank := 0) r
ORDER BY date ASC

id | group | date | rank
2 11 2016-01-1 1
3 22 2016-02-1 2
5 3 2016-04-1 3
4 22 2016-05-1 4
6 3 2016-06-1 5
1 11 2016-12-1 6

我需要实现

id  | group | date       | rank
2 11 2016-01-1 1
1 11 2016-12-1 6
3 22 2016-02-1 2
4 22 2016-05-1 4
5 3 2016-04-1 3
6 3 2016-06-1 5

最佳答案

我将您的表重命名为 test1,并将 group 列重命名为 groupp,因为 group 是保留字。

以下查询将为您提供所需的结果

SELECT t1.*
FROM (SELECT id, groupp, min(date), @rownum := @rownum + 1 as rank
FROM test1, (SELECT @rownum := 0) r
GROUP BY groupp
ORDER BY date ASC) qry
INNER JOIN test1 t1 on t1.groupp = qry.groupp
ORDER BY qry.rank, t1.date asc;

标有qry的查询将为您提供每个组p的最小日期记录。查询t1将获取表中的所有记录。当您在 groupp 列上连接这两个记录时,您基本上会根据第一个查询的结果从表中获取具有适当排名的所有记录。然后您只需按排名和日期排序即可。

我测试了查询,它使用 sql fiddle 返回了所需的结果

http://sqlfiddle.com/#!9/90dee/1

关于MySQL:使用组的最早日期来确定每行的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40912996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com