mysql - 我的 SQL:如何返回仅显示第一天观看的电影的不同记录(电影)的计数
问题描述
我试图弄清楚如何只返回具有相同 int ID 的记录的第一个日期。为了澄清,这里是我的表的列:
ID int name varchar(200) movies varchar(200) visit_date timestamp day date
假设我有 3 条 ID 为 7 的记录,但它们的电影不同。我想做的是计算不同电影的数量,但仅在他们开始看电影的第一天。
我在 MySQL Workshop 中尝试了以下 SQL 查询:
SELECT ID, name, movies, day, COUNT(movies) AS distinct_movies
FROM moviewatching
WHERE day = (SELECT MIN(day) FROM moviewatching)
GROUP BY ID, name, movies, day
ORDER BY ID;
但是,当我运行此查询时,该表只返回表中所有日期 DATE 记录中的最早日期,而它应该返回每个 ID 的最早日期。谁能解释我需要做什么?我已经用谷歌到处搜索了这个,找不到任何接近我想要做的事情。
这是所需结果的示例表:
ID name movies day
4 Mike Funky Monkey 04/22/18
6 orlando The burrowers 08/26/22
6 orlando Carnival Row 08/26/22
6 orlando Beethoven. 08/26/22
6 orlando The Standard 08/28/22
7 Mellany Appalooza 09/30/22
但我只得到以下信息:
ID name movies day
4 Mike Funky Monkey 04/22/18
谢谢您的帮助!
解决方案
我想做的是计算不同电影的数量,但仅在他们开始看电影的第一天。
我会建议窗口函数或两个级别的聚合。你的问题有点模糊,但我认为这就是你所描述的:
SELECT ID, min_day, COUNT(DISTINCT movies) AS distinct_movies
FROM (SELECT mw.*,
MIN(day) OVER (PARTITION BY id) as min_day
FROM moviewatching mw
) mw
WHERE day = min_day
GROUP BY ID, min_day
ORDER BY ID;
推荐阅读
- google-apps-script - 使用宏向单元格添加设置值
- python - 在 Python 和 Keras 中通过深度学习进行光照估计后如何显示颜色校正图像?
- machine-learning - 用 GMM 训练隐马尔可夫模型,在 python 中经过一些迭代后出现 nan
- ruby-on-rails - 如何在 PhusionPassenger.on_event() 分叉后插入代码
- ruby-on-rails - 使用 Bootstrap 组件扩展 Trix
- java - 将两个表视图绑定在一起,但由于内容行高不同导致索引不匹配
- git - Git 强制提交和推送,当得到“没有提交”
- android - 从 Google Play 获取付费应用的购买令牌
- swift - “不支持可变枚举案例” swift 5 错误
- r - 有没有比 fread() 更快的方法来读取大数据?