我有一個包含行和變數 a=3 的 SQL 表。我想找到所有差異 >=3 的數字。在第一步,我需要取第一行,然后找到下一個差異為 > = a (3) 的行。這是 5。然后是 12。現在從 12 有必要找到差值 >= a (3) 的最近的線。它是 15 等等。我想用數字獲得決賽桌:1, 5, 12, 15, 20, 30
|number|
|------|
| 1 |
| 5 |
| 12 |
| 13 |
| 14 |
| 15 |
| 20 |
| 21 |
| 30 |
uj5u.com熱心網友回復:
使用自連接:
select a.number
from mytable a
left join mytable b on b.number <= a.number 3
and a.number < b.number
where b.number is null
這只能從選擇行a是不加入一個號碼,不要超過a.number較大,但小于a.number 3
代碼略少,但可能更鈍:
select a.number
from mytable a
left join mytable b on b.number - a.number between 1 and 3
where b.number is null
uj5u.com熱心網友回復:
我們可以在這里使用LEAD和LAG分析函式:
WITH cte AS (
SELECT *, LAG(number) OVER (ORDER BY number) number_lag,
LEAD(number) OVER (ORDER BY number) number_lead
FROM yourTable
)
SELECT number
FROM cte
WHERE number - number_lag > 3 OR number_lead - number > 3;
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/357299.html
標籤:sql PostgreSQL的
