Nakrule:
私は、次の表を持っています:
SequenceNumberは、常に私は特定のために、取得したいと思い10の倍数であるcpId
、(まだ10の倍数で)最小の空きシーケンス番号を。例えば、のためにcpId = 1
利用可能な最小、でなければなりません20
。以下のためにcpId = 2
、それはする必要があります10
。
私はすべてのCPIDのために利用可能な最小sequenceNumberがを取得するには、次の文を持っている、と私は追加することができますかわからないWHERE cpId = x
文内:
SELECT MIN(t1.sequenceNumber + 10) AS nextID
FROM LogicalConnection t1
LEFT JOIN LogicalConnection t2
ON t1.sequenceNumber + 10 = t2.sequenceNumber
WHERE t2.sequenceNumber IS NULL;
DBのフィドル:https://www.db-fiddle.com/f/ag67AkFzfwPZEva8bTN7Q3/2#&togetherjs=L9nHb3Uu7O
ご協力ありがとうございました!
ゴードン・リノフ:
あなたは使用することができますlead()
次の番号とし、いくつかの簡単なロジックを取得するには:
select cpid,
(case when min_sn > 10 then 10
else min(sequenceNumber) + 10
end)
from (select t.*,
min(sequenceNumber) over (partition by cpid) as min_sn,
lead(sequenceNumber) over (partition by cpid order by sequenceNumber) as next_sn
from t
) t
where next_sn is null or next_sn <> sequenceNumber + 10
group by cpid, min_sn;