資料庫一張表中 有 s_position 和 e_position 兩個欄位,, 分別用來存盤 其實位置和終止位置,現在需要查詢出表中位置存在重疊部分的資料,比如:
ID s_position e_position
1 0 15
2 7 29
3 31 40
4 45 50
資料之間只要有重復就能找出來。。。求高手指點一下
uj5u.com熱心網友回復:
最終要展示的結果是什么?uj5u.com熱心網友回復:
select a.s_position , b.e_position from table a, table b where a.s_position=b.e_position 會帶來至少平方級別的資料累計(不適合大表)uj5u.com熱心網友回復:
可以考慮用LAG函式,原理是把S_POSITION和E_POSITION排成一行,然后按POSITION排序,如果出現后一個ID小于前一個ID,則為要抓取的重疊部分SELECT *
FROM (SELECT ID,
POSITION,
LEAD(ID, 1, 0) OVER(ORDER BY POSITION) AS NEXTID
FROM (SELECT ID, S_POSITION AS POSITION
FROM TABLE
UNION
SELECT ID, E_POSITION AS POSITION
FROM TABLE))
WHERE ID > NEXTID
AND NEXTID <> 0
uj5u.com熱心網友回復:
select t1.*, decode(sign(s_position - lag(e_position) over(order by s_position)), -1, '重合') ll from tab t1;uj5u.com熱心網友回復:
select * from table where s_position = e_position,這樣寫不行么?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/62111.html
標籤:基礎和管理
上一篇:求助SQL陳述句高手
下一篇:關于oracle 匯入匯出
