mysql - MySQL:在 LEFT JOIN 中添加 WHERE
问题描述
我有下表:
SequenceNumber 始终是 10 的倍数。对于特定的,我想获得cpId
最小的空闲序列号(仍然是 10 的倍数)。例如,对于cpId = 1
,可用的最小应该是20
。对于cpId = 2
,应该是10
。
我有以下语句来获取所有 cpId 的最小可用序列号,但我不知道如何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;
推荐阅读
- javascript - 显示 AngularJS 中溢出的字数
- ios - UITableView 键盘外观上的自动滚动问题
- python - 在 tensorflow 2.0 中加载 tfrecord 文件时出错
- ajax - Flask:单击按钮时,将变量从 Javascript 传递到 Flask
- html - 如何有条件地为 OPENING 和 CLOSING 标签呈现 DIV 和 REACT 组件?
- java - 如何打印更大的 unicode 字符
- javascript - 无法在 Android 上 react-native-paper 的 AppBar 中显示居中的 svg 作为反应组件
- javascript - 任何人都有简单的方法来使用 css 和 html 创建它?
- mysql - 错误 HTTP/1.1 400 Bad Request 使用 nodemcu 在 mysql 中输入数据
- javascript - react-testing-library:调试输出的某些部分不可见