編輯:,因爲我已經在這裏誤解了問題的SQL語句將返回所有的第一座自由和從第一自由相鄰席位數。首先是免費座位數量更多。
SELECT count(1) free,(
CASE status
WHEN "Booked" THEN
@prev:=NULL
ELSE
@prev:=COALESCE(cast(@prev as unsigned), seat_no)
END) first
FROM
(SELECT @prev:=null) f,
(SELECT seat_no, status FROM seats ORDER BY seat_no) seats
GROUP BY first
HAVING first>=0
ORDER BY 1 DESC, 2
因此,對於你的例子將返回:
free | first
-----------
5 2
3 8
如果你只在第一序貫座椅可滿足您的要求,並沒有更多的只是添加的免費座位數的情況感興趣,所以如果你想3個席位將free>=3
將做到這一點:
SELECT count(1) free,(
CASE status
WHEN "Booked" THEN
@prev:=NULL
ELSE
@prev:=COALESCE(cast(@prev as unsigned), seat_no)
END) first
FROM
(SELECT @prev:=null) f,
(SELECT seat_no, status FROM seats ORDER BY seat_no) seats
GROUP BY first
HAVING first>0 AND free>=3
LIMIT 1
這將輸出:
free | first
------------
5 2
可以在那裏有多少個座位? – codeholic 2010-02-25 14:25:13
一次最多可容納80個座位 – shantanuo 2010-02-25 14:52:03
如果有人要求3個座位,您是否希望爲他們提供8-10個座位(對於想要更大規模的人來說,保留2-6個座位),還是給他們連續三個座位? – outis 2010-02-25 15:13:41