Sqlite 查询:每个播客的最近五集
Sqlite Query: Five Most Recent Episode of Each Podcast
我的应用程序在 SQLite table 中存储了数百个播客片段。我正在寻找 return 每个 播客的最近五集 的查询(播客存储在不同的 table 中)。
相关的 table 列是
media_id
= 主键(剧集的唯一标识符)
publication_date
= 可用于查找最近的剧集
episode_remote_podcast_feed_location
= 定义与播客的关系
这是我尝试过的:
SELECT *
FROM episodes a
WHERE a.media_id IN (
SELECT b.media_id
FROM episodes b
WHERE a.episode_remote_podcast_feed_location = b.episode_remote_podcast_feed_location
ORDER BY b.episode_remote_podcast_feed_location, b.publication_date DESC
LIMIT 5
)
ORDER BY a.episode_remote_podcast_feed_location, a.publication_date
上面的查询总是return五集(总共)——不管我有多少播客。至少那些剧集都属于同一个播客。 (剧集对 episode_remote_podcast_feed_location
具有相同的值。)
需要的解决方案: 我需要一个查询,每个播客 return 有五集(最近的一集)。因此,如果应用程序只存储了一个播客,return 五集。如果应用程序存储了三个播客,return 15 集:播客 b 有五集,播客 c 有五集。
附加信息: 我需要能够在 Android 应用程序中使用查询。 Android 捆绑的 SQLite 版本是 not the most current. Some SQLite features, for example Window Functions, are not supported on Android (see also: ).
您可以在子查询中使用 row_number()
来枚举每个播客的剧集,然后在外部查询中过滤每个播客的前 5 集:
select *
from (
select e.*,
row_number() over(
partition by episode_remote_podcast_feed_location
order by publication_date desc
) rn
from episodes e
) e
where rn <= 5
在不支持 window 函数的 SQLite 版本中,替代方法是相关子查询:
select *
from episodes e
where (
select count(*)
from episodes e1
where
e1.episode_remote_podcast_feed_location = e.episode_remote_podcast_feed_location
and e1.publication_date >= e.publication_date
) <= 5
我的应用程序在 SQLite table 中存储了数百个播客片段。我正在寻找 return 每个 播客的最近五集 的查询(播客存储在不同的 table 中)。
相关的 table 列是
media_id
= 主键(剧集的唯一标识符)publication_date
= 可用于查找最近的剧集episode_remote_podcast_feed_location
= 定义与播客的关系
这是我尝试过的:
SELECT *
FROM episodes a
WHERE a.media_id IN (
SELECT b.media_id
FROM episodes b
WHERE a.episode_remote_podcast_feed_location = b.episode_remote_podcast_feed_location
ORDER BY b.episode_remote_podcast_feed_location, b.publication_date DESC
LIMIT 5
)
ORDER BY a.episode_remote_podcast_feed_location, a.publication_date
上面的查询总是return五集(总共)——不管我有多少播客。至少那些剧集都属于同一个播客。 (剧集对 episode_remote_podcast_feed_location
具有相同的值。)
需要的解决方案: 我需要一个查询,每个播客 return 有五集(最近的一集)。因此,如果应用程序只存储了一个播客,return 五集。如果应用程序存储了三个播客,return 15 集:播客 b 有五集,播客 c 有五集。
附加信息: 我需要能够在 Android 应用程序中使用查询。 Android 捆绑的 SQLite 版本是 not the most current. Some SQLite features, for example Window Functions, are not supported on Android (see also:
您可以在子查询中使用 row_number()
来枚举每个播客的剧集,然后在外部查询中过滤每个播客的前 5 集:
select *
from (
select e.*,
row_number() over(
partition by episode_remote_podcast_feed_location
order by publication_date desc
) rn
from episodes e
) e
where rn <= 5
在不支持 window 函数的 SQLite 版本中,替代方法是相关子查询:
select *
from episodes e
where (
select count(*)
from episodes e1
where
e1.episode_remote_podcast_feed_location = e.episode_remote_podcast_feed_location
and e1.publication_date >= e.publication_date
) <= 5