巧用MySQL的临时变量之四:如何找出一个表中自增字段中间的空缺的数据段
有时,我们很想知道一个表的某个不重复的流水号字段,中间空缺多少?能不能找出一段足够大的空缺,来给另一系统用。
测试数据就不准备,自己找一个表,把相应的表名,字段换一下即可。
– 找可用段, 从一个流水号中找出中间空缺的数据段。
SELECT (Q.auto_id - Q.与上一行的差 + 1) AS 可用段开始, (Q.auto_id - 1) AS 可用段结束, Q.与上一行的差 AS 可用数
FROM(
SELECT auto_id, (auto_id - @hh) AS 与上一行的差, (@hh := auto_id) AS 下一行用到的上一行
FROM my_table, (SELECT @hh := 0) t
ORDER BY auto_id
) AS Q
WHERE Q.与上一行的差 > 40000;
运行效果如下图:
你只要把表名my_table,字段名auto_id 替换一下即可测试。
总结:通过MySQL的临时变量,可以巧妙地获得上一行记录的值,从而方便地与下一行进行各种运算。妙!高!实在是高!