我想在postgresql中使用一個查詢,它可以根據用於某些分頁的起始記錄ID獲取前一個和下一個X數量的記錄。下一個或上一個只有1個並不難,但那不是我所需要的。SQL - 獲取下一個和上一個X記錄
我發現了一些接近的查詢,但我對PostgreSQL查詢並不瞭解,無法完成這些類型的複雜查詢。
下面這個查詢我嘗試過並改變了工作,但是似乎只帶回了上一個和下一個ID的標識和全部的記錄。
但是我需要能夠給出一個起點,例如在WHERE
子句中提供一個ID,並且如果它們存在,則只能獲得10條上一條和10條下一條記錄。這是可能在SQL單獨做?
SELECT
m.med_id AS id,
coalesce(
LEAD(m.med_id) OVER (ORDER BY m.med_id DESC),
(select med.med_id from media as med order by med.med_id desc limit 1)
) AS nextitemid,
coalesce(
LAG(m.med_id) OVER (ORDER BY m.med_id DESC),
(select med.med_id from media as med order by med.med_id asc limit 1)
) AS previtemid
FROM media m
WHERE m.post_type = 1
ORDER BY m.med_id DESC LIMIT 20;
任何幫助將不勝感激,它可以是任何類型的SQL解決方案,可以實現這一點。
我相信所希望的輸出將來自100個作爲查詢中提供的ID起點的50個項目的示例。
|previtemids|nextitemids|
49 51
48 52
47 53
46 54
45 55
44 56
43 57
42 58
41 59
40 60
我走近了,但一直沒有能夠得到它在一個查詢。接近我的方案的答案比通用答案更有幫助。
您想要列中的前10個和後10個記錄,或每個記錄的單獨行嗎? – Alex
嗯好問題@亞歷克斯我會讀它從PHP到數組。也許列可能更容易? –
您能否發佈您想要的輸出示例? – Alex