Sql-Server
在排名列表中查找最近的追隨者
在我的數據庫中,我有一個名為
Rank_List_T
:等級名稱時間 約翰一書 110 2大衛120 3鮑勃121 4 漢斯 124 5 克勞斯 126 6古斯塔夫140
我對追隨者最近的人感興趣。在上表中,David 之後是 Bob,相差 1。Hans 之後是 Claus,相差 2。
我需要一個返回這個的 SQL 查詢:
名稱時差 大衛 1 漢斯 2 鮑勃 3 約翰福音 10 第 14 條
是的,這可以通過將表連接
RankList_T
到它自己來完成:選擇 r1.rank,r1.name,r1.time, r2.rank,r2.name,r2.time, r2.time-r1.time 作為 time_diff 來自 GUEST。[RANK_LIST_T] r1 left join GUEST.[RANK_LIST_T] r2 on r1.rank+1=r2.rank 其中 r2.rank 不為空 按 r2.time-r1.time 排序 ;
但這具有非常差的性能,算法複雜度為 O(n^2)。我正在尋找一種更有效的方法來在 SQL 數據庫上執行此操作。
請檢查DDL 和 DML 以重現問題。
SELECT *, LEAD(time) OVER (ORDER BY time) - time AS delta FROM RANK_LIST_T ORDER BY 4;