SQL 如何对每个 id 和日期的行进行分组而不重复名称并排列它们

问题描述 投票:0回答:1

我遇到了问题,但不知道如何解决,因为我是初学者。

我有一张这样的桌子:

id 日期 时间 标题
1 2023-03-03 2023-03-03 10:00 A
1 2023-03-03 2023-03-03 10:10 A
1 2023-03-03 2023-03-03 10:20 A
1 2023-03-03 2023-03-03 10:30 B
1 2023-03-03 2023-03-03 10:40 B
1 2023-03-03 2023-03-03 10:50 C
2 2023-03-03 2023-03-03 12:00 A
2 2023-03-03 2023-03-03 12:20 B

想要的结果如下。 对于每个标题,我只使用最短的时间,之后我想根据 ID 和日期对它们进行排名:

id 日期 时间 标题 排名
1 2023-03-03 2023-03-03 10:00 A 1
1 2023-03-03 2023-03-03 10:30 B 2
1 2023-03-03 2023-03-03 10:50 C 3
2 2023-03-03 2023-03-03 12:00 A 1
2 2023-03-03 2023-03-03 12:20 B 2

有人可以帮我吗? 谢谢!

sql
1个回答
0
投票

为了达到预期的结果,您需要首先确定每个 ID 和日期组中每个标题的最短时间。然后,您可以根据这些标题的最短时间对它们进行排名。

这是使用 SQL 的分步解决方案:

计算每个 ID 和日期组中每个标题的最短时间。 根据最短时间对标题进行排名。

WITH RankedData AS (
    SELECT 
        id,
        date,
        title,
        MIN(time) AS min_time
    FROM 
        your_table_name
    GROUP BY 
        id, date, title
),
FinalRanking AS (
    SELECT 
        id,
        date,
        title,
        RANK() OVER(PARTITION BY id, date ORDER BY min_time) AS rank
    FROM 
        RankedData
)
SELECT 
    id,
    date,
    time,
    title,
    rank
FROM 
    your_table_name t
JOIN 
    FinalRanking r ON t.id = r.id AND t.date = r.date AND t.title = r.title
ORDER BY 
    id, date, time;

确保将 your_table_name 替换为表的实际名称。此 SQL 查询将根据您提供的示例数据和要求提供所需的输出。

© www.soinside.com 2019 - 2024. All rights reserved.