mysql - 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 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;
推荐阅读
- javascript - 尝试在 discord.js 中抓取频道时无法读取未定义的属性
- javascript - 如何用更少的代码在 JavaScript 中编写这个逻辑?
- ios - 使用 DELETE 的 HTTP 调用在 iOS 上失败,在 Android 上成功
- database - git 存储库中的数据库
- python - 过滤具有特定权限的服务器名称(Discord API)
- python - 如何使用 Keras Lambda 层避免此错误?
- python-3.x - 初始化 Python 自定义分发
- javascript - 我正在尝试为 mp3 文件添加一个音频播放器,但真的卡在它上面
- sql - 由于多列信息不同,对所有行进行标记;水晶报表
- python-3.x - 为什么 python 脚本运行时的结果在每个解释器上都不同,包括类方法/属性?