首页 > 解决方案 > 我的 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

谢谢您的帮助!

标签: mysqlsql

解决方案


我想做的是计算不同电影的数量,但仅在他们开始看电影的第一天。

我会建议窗口函数或两个级别的聚合。你的问题有点模糊,但我认为这就是你所描述的:

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;

推荐阅读