在多项结果中排除未来日期 select

Exclude future dates in a multi results select

我有两个表:

现在我想做的是:提取过去一个月至少播出一集的前 10 部电视节目(按受欢迎程度指数)(我想要获得的是一个趋势列表)。

我正在做的是:

SELECT 
     tvshows.name,
     tvshows.popularity,
     MAX(episodes.air_date) as last_air_date
 FROM
      tvshows,
      episodes
 WHERE
       tvshows.id = episodes.show_id
 GROUP BY 
     tvshows.id
 HAVING
     last_air_date BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE()

但由于 MAX 功能,它不起作用,因为有节目正在播出(甚至在本月),但也有剧集设置为在遥远的将来播出(不符合上个月的条件)。

有人可以帮我解决这个问题吗?谢谢

如何过滤掉 WHERE 子句中的未来节目:

SELECT 
     tvshows.name,
     tvshows.popularity,
     MAX(episodes.air_date) as last_air_date
 FROM
      tvshows
 JOIN episodes
   ON tvshows.id = episodes.show_id
 WHERE  episodes.air_date <= CURRENT_DATE()
 GROUP BY 
     tvshows.id
 HAVING
     last_air_date BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE()

请注意,如果您的 air_date 包括时间,则将其与 CURRENT_DATE() 进行比较将排除显示今天午夜后播出的时间。我还更新了您的 JOIN 语法,虽然您的语法有效,但它已被弃用多年。

未测试,但应该可以这样做

    SELECT top 10
         tvshows.id,
         tvshows.name,
         tvshows.popularity,
         MAX(episodes.air_date) as last_air_date
     FROM
          tvshows,
          episodes
     WHERE
           tvshows.id = episodes.show_id
           and episodes.air_date BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE()
     GROUP BY 
         tvshows.id,
         tvshows.name,
         tvshows.popularity
     order by popularity desc