我有一個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 –