[英]Group results only if a condition is met in mysql
只有當用戶 ID 和月份創建日期相同時,有沒有辦法對結果進行分組?
用戶身份 | 秩 | created_at |
---|---|---|
1 | 3 | 2021-12-06 14:11:14 |
1 | 1 | 2021-11-06 14:11:14 |
1 | 2 | 2021-12-06 14:11:14 |
SELECT
*
FROM
table_name
GROUP BY
user_id,
DATE_FORMAT(created_at, '%m-%y')
ORDER BY
rank DESC
通過查詢,我得到如下
用戶身份 | 秩 | created_at |
---|---|---|
1 | 3 | 2021-12-06 14:11:14 |
我需要的是獲得以下結果:
因為記錄來自不同的月份:2021-12-06 14:11:14 - 2021-11-06 14:11:14
用戶身份 | 秩 | created_at |
---|---|---|
1 | 3 | 2021-12-06 14:11:14 |
1 | 1 | 2021-11-06 14:11:14 |
您似乎希望每個用戶每月獲得最高排名,因此 max(rank) 是合適的,沒有聚合函數的 group_by 也不合適。
DROP table if exists t;
create table t
(user_id int, rnk int, created_at datetime);
insert into t values
(1, 3 ,'2021-12-06 14:11:14'),
(1, 1 ,'2021-11-06 14:11:14'),
(1, 2 ,'2021-12-06 14:11:14');
sELECT
t.user_id,max(t.rnk) `rank` ,DATE_FORMAT(created_at, '%m-%y') ym
FROM
t
GROUP BY
user_id,
DATE_FORMAT(created_at, '%m-%y')
ORDER BY
`rank` DESC
+---------+------+-------+
| user_id | rank | ym |
+---------+------+-------+
| 1 | 3 | 12-21 |
| 1 | 1 | 11-21 |
+---------+------+-------+
2 rows in set (0.001 sec)
在下方查詢產品您需要的output。
SELECT
user_id,rank,
created_at
FROM
table_name
GROUP BY
user_id,
created_at
ORDER BY
rank DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.