MySQLは:JOINをLEFTにWHEREを追加します

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;

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=13100&siteId=1