您可以使用子查詢或兩年@variable
即做到這一點http://sqlfiddle.com/#!2/7c2fa/7
SELECT
-- Re-selected at this level to tidy up the calculation fields
f.rollNumber,
f.ownerName,
f.ownerNumber
FROM (
SELECT
d.rollNumber,
d.ownerName,
-- If the current roll number equals the previous, increment, else reset to 1
@i := IF([email protected],@i+1,1) AS ownerNumber,
-- Sets @last to be == the "current" one for use on next row
@last := d.rollNumber
FROM
(
-- Get the raw data ordered by roll number
SELECT
LPAD(rollNumber,6,'0') rollNumber,
ownerName
FROM someTable
-- Reorder/filter as much as you like, but always rollNumber ASC first
ORDER BY
rollNumber ASC,
ownerName ASC
) d,(
-- Set up the variables we will need shortly
SELECT @i:=0,@last:=0
) v
) f;
巨大的感謝,這工作出色!仍然在學習MySQL的變量方面,這真的有助於把它放到視角。 – Aeide 2013-03-27 18:28:52
聽起來很好,起初可能有點頭疼,但用得很好,可以在您的查詢中打開更多的可能性。有了這樣的事情,你只需要記住你正在做的事情的順序 - 一旦你在最高層次,你可以按照你喜歡的任何方式重新排序,但是沒有ownerNumber改變,因爲在那時它是固定的:)(嘗試添加例如一個'ORDER BY f.ownerName DESC') – 2013-03-27 18:30:59