您可以使用子查询或两年@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