我有两张桌子。
id | title
-------------------------
1 The X-Files
2 Mr. Robot
tv_show_id | title | epoch_airtime
----------------------------------------------------
1 My Struggle 15249204282
1 Via Negativa 11023920382
1 Requiem 10292092022
2 Finale 15020392031
tv_shows.title | episodes.title | episodes.epoch_airtime
---------------------------------------------------------------------
The X-Files My Struggle 15249204282
Mr. Robot Finale 15020392031
我希望我的查询能够返回每个节目的下一个无节奏的剧集,以及它的播放时间和节目的标题。因此,结果集中只应包含一个X-Files剧集,并且应该是下一个播出的剧集。
我现在的查询是:
SELECT episodes.title, episodes.airtime, tv_shows.title
FROM episodes
JOIN tv_shows on episodes.tv_show_id = tv_shows.id
WHERE episodes.airtime > <CURRENT_EPOCH_TIME>
GROUP BY tv_shows.title;
<CURRENT_EPOCH_TIME>
位只是这篇文章的占位符,我将使用参数化查询和我程序中的当前纪元时间,忽略它。
这会返回每个节目的一集,但它是将来最远的一集 - 或数据库中的最后一集 - 当我想要相反时。 ORDER BY
语句似乎是在调整结果集的顺序,但不会选择哪些结果。这个让我有些不耐烦,Google和我在桌子上的参考书并没有帮助。如果有人能解释这类问题的解决方案是什么,我会喜欢它。
答案 0 :(得分:0)
在Oracle / SQL Server中,不确定SQLite
SELECT SHOWTITLE ,EPSTITLE ,AIRTIME FROM
(select tv_shows.title ShowTitle
,episodes.title EpsTitle
,episodes.epoch_airtime AirTime
, RANK() OVER(PARTITION BY episodes.tv_shows_id order by episodes.epoch_airtime DESC) RNK
from tv_shows inner join
episodes on episodes.tv_shows_id=tv_shows.id) T
WHERE RNK=1;