我有一个SQLite数据库是PVR应用程序的一部分。其中一个表(epg_event)包含电视节目的所有数据。从同一个表中加入两个结果集?
我想写一个查询,它将返回现在和下一个单一记录中的现在/下一个显示。
我可以很容易地单独查询两个。
自身看起来像这样现在查询......
SELECT now.channel_oid as _id,
now.oid as now_oid,
now.title as now_title,
now.start_time as now_start_time,
now.end_time as now_end_time
FROM epg_event now
WHERE now.start_time <= datetime('now') AND now.end_time > datetime('now')
ORDER BY now.channel_oid
这个伟大的工程,并在测试中我得到了我所需要的。例如...
_id now_oid now_title now_start_time now_end_time
10029 16365522 BBC News 2014-05-21 00:45:00 2014-05-21 05:00:00
10030 16365900 Making Art 2014-05-21 03:00:00 2014-05-21 04:00:00
...
自身看起来像这样下一个查询...
SELECT next.channel_oid as _id,
next.oid as next_oid,
next.title as next_title,
MIN(next.start_time) as next_start_time,
next.end_time as next_end_time
FROM epg_event next
WHERE next.start_time > datetime('now')
GROUP BY next.channel_oid
这也返回下一个电视节目正确的结果。
我遇到的问题是我试图结合两个查询返回每个通道的单个记录与现在和下一个数据,但我不知道如何做到这一点。我想我需要使用某种类型的JOIN,但是我的SQLite工具在我尝试时会一直抛出错误。
理想的情况是我想要做的就是让每排一个_id列和现在/下一列组合成排,所以我有以下列...
_id now_oid now_title now_start_time now_end_time next_oid next_title next_start_time next_end_time
是否有可能对来自同一个表的两个查询使用JOIN,还是应该使用别的东西?
为什么不使用row_over查询。它们是用这样的实例设计的。用分区和下一个搜索行。互联网充斥着代码示例。 –
@AnthonyHorne:好的,我来看看。 SQL不是我的强项,除了基本查询以外的任何事情总是让我头疼。 – Squonk
这是一个很好的例子:http://www.kodyaz.com/articles/sql-select-previous-and-next-rows-with-current-row-in-tsql.aspx –