首页 > 解决方案 > mySQL 根据日期和其他列计算重复条目

问题描述

我有一个类似这样的用户数据库表。

ID      user_id     country_id      last_login
1       132          2              2021-07-14 10:20:32
2       121          4              2021-07-15 13:49:08
3       124          2              2021-07-14 13:49:31
4       123          5              2021-07-05 13:49:40
5       132          2              2021-07-14 13:50:32
6       132          2              2021-07-15 09:34:23

在这里,我想进行某种 sql 查询,以便显示在同一日期具有相同 country_id 的用户的 ID 数

所以输出应该是这样的

ID  Count     user_id       country_id      last_login
1    3          132          2              2021-07-14
2    1          121          4              2021-07-15
4    1          123          5              2021-07-05
6    1          132          2              2021-07-15

标签: mysql

解决方案


如果您使用的是 MySQL 8+ 并且可以访问分析函数,我们可以尝试:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY country_id, DATE(last_login) ORDER BY ID) rn,
              COUNT(*) OVER (PARTITION BY country_id, DATE(last_login)) cnt
    FROM yourTable
)

SELECT ID, cnt AS Count, user_id, country_id, last_login
FROM cte
WHERE rn = 1;

在早期版本的 MySQL 上(但你应该真正升级):

SELECT t2.ID, t2.cnt AS Count, t1.user_id, t1.country_id, t1.last_login
FROM yourTable t1
INNER JOIN
(
    SELECT country_id, DATE(last_login) AS last_login_date, COUNT(*) AS cnt,
           MIN(ID) AS ID
    FROM yourTable
    GROUP BY country, DATE(last_login)
) t2
    ON t1.country_id = t2.country_id AND
       DATE(t1.login_date) = t2.last_login_date AND
       t1.ID = t2.ID;

推荐阅读