我遇到了问题,但不知道如何解决,因为我是初学者。
我有一张这样的桌子:
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 |
有人可以帮我吗? 谢谢!
为了达到预期的结果,您需要首先确定每个 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 查询将根据您提供的示例数据和要求提供所需的输出。