在多项结果中排除未来日期 select
Exclude future dates in a multi results select
我有两个表:
- 电视节目(包含 unique_id 和人气指数)
- 与电视节目相关的电视剧集
现在我想做的是:提取过去一个月至少播出一集的前 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
我有两个表:
- 电视节目(包含 unique_id 和人气指数)
- 与电视节目相关的电视剧集
现在我想做的是:提取过去一个月至少播出一集的前 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