我需要从一组“系列”(只有数字)中找到连续的数字范围(最小,最大)。
我使用@row_number编写了一个SQL,但它部分工作。如果行ID (int、主、auto_increment)不是连续的,则返回两个结果集而不是一个结果集。
检查这只小提琴以查看查询的工作方式。
因此,我需要找到一种方法来做到这一点,而不是使用@row_number或使用它,而是使用一个条件将2的结果“绑定”到单个--序列是连续的(即使ID不是连续的)。
正确的结果应该是:(参见这只小提琴)
MIN MAX PRODUCT_ID
220 230 20
1106 1108 18
1110 1110 18
1112 1120 18
响应时间也很重要。
谢谢
发布于 2014-12-15 06:57:27
我猜你是在追求这样的东西..。
SELECT a.product_id
, a.series start
, MIN(c.series) end
FROM card a
LEFT
JOIN card b
ON b.product_id = a.product_id
AND b.series = a.series - 1
LEFT
JOIN card c
ON c.product_id = a.product_id
AND c.series >= a.series
LEFT
JOIN card d
ON d.product_id = a.product_id
AND d.series = c.series + 1
WHERE b.series IS NULL
AND c.series IS NOT NULL
AND d.series IS NULL
GROUP
BY a.product_id
, a.series;
http://sqlfiddle.com/#!2/32dc8/4
如果性能仍然是一个问题,那么我们可以再看一次@变量的解决方案。
https://stackoverflow.com/questions/27486460
复制