[英]Get the row with latest date after inner join
我有這個查詢:
SELECT
achievements.id,
achievements.name,
achievements.category,
userAchievements.createdAt
FROM
achievements
INNER JOIN
userAchievements ON userAchievements.achievementId = achievements.id
AND userAchievements.userId = 12
WHERE
achievements.type = 2
此查詢的結果是:
ID | 姓名 | 類別 | 創建時間 |
---|---|---|---|
8 | 第一的 | 1 | 2021-02-11 |
13 | 第二 | 2 | 2021-02-12 |
14 | 第三 | 4 | 2021-03-01 |
15 | 第四 | 4 | 2021-03-02 |
我必須只留下具有 max createdAt 字段的唯一類別。
我需要一個將給出以下結果的查詢:
ID | 姓名 | 類別 | 創建時間 |
---|---|---|---|
8 | 第一的 | 1 | 2021-02-11 |
13 | 第二 | 2 | 2021-02-12 |
15 | 第四 | 4 | 2021-03-02 |
如果我使用group by
那么它返回 id 為 14 的行。
MySQL 版本 - 5.7.33。
成績表:
ID | 姓名 | 類別 |
---|---|---|
8 | 第一的 | 1 |
13 | 第二 | 2 |
14 | 第三 | 4 |
15 | 第四 | 4 |
用戶成就表:
ID | 成就標識 | 用戶身份 | 創建時間 |
---|---|---|---|
3 | 8 | 12 | 2021-02-11 |
7 | 13 | 12 | 2021-02-12 |
36 | 15 | 12 | 2021-03-02 |
40 | 14 | 12 | 2021-03-01 |
PS我設法編寫了一個解決問題的查詢
SELECT
*
FROM
(SELECT
*,
IF(@prev <> category, @rn:=0, @rn),
@prev:=category,
@rn:=@rn + 1 AS rn
FROM
(SELECT
achievements.id,
achievements.name,
achievements.category,
userAchievements.createdAt
FROM
achievements
INNER JOIN userAchievements ON userAchievements.achievementId = achievements.id
AND userAchievements.userId = 12
WHERE
achievements.type = 2) as ach, (SELECT @rn:=0) rn, (SELECT @prev:='') prev
ORDER BY ach.createdAt DESC) t
WHERE
rn = 1
您可以使用 window 函數:
SELECT a.*
FROM (SELECT a.*,
ROW_NUMBER() OVER (PARTITION BY a.category ORDER BY a.created_at DESC) as seqnum
FROM achievements JOIN
userAchievements ua
ON ua.achievementId = a.id AND
ua.userId = 12
WHERE a.type = 2
) a
WHERE seqnum = 1;
這個子查詢基本上搜索所有最大日期,按類別分組。
SELECT MAX(_ua.createdAt) FROM `achievements` _a INNER JOIN user_achievements _ua ON _a.id = _ua.achievementId group by _a.category
所以你也許可以這樣做:
SELECT a.* FROM achievements a
INNER JOIN user_achievements ua ON a.id = ua.achievementId
AND ua.createdAt IN (SELECT MAX(_ua.createdAt) FROM `achievements` _a INNER JOIN
user_achievements _ua ON _a.id = _ua.achievementId group by _a.category)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.