2013-03-27 3 views
0

Было задано много подобных вопросов, но я не мог найти способ сделать именно то, что я пытаюсь сделать. Мне нужно сохранить текущее количество повторяющихся записей в столбце и сообщить это число в столбце «Номер владельца». Пример ниже:Сохраняйте текущую историю дублированных записей в MySQL

Roll Number | Owner Name | Owner Number 
000001  | Patrick H. | 1 
000001  | Paula H. | 2 
000002  | Fred R.  | 1 
000003  | Chris P. | 1 
000003  | Kayla A. | 2 
000003  | Phil J.  | 3 

Другими словами, мне просто нужно посчитать, сколько владельцев каждый рулон имеет до этого момента, не только общее количество владельцев для каждого рулона. Любая помощь будет принята с благодарностью.

ответ

0

Вы можете сделать это, используя подзапрос или два и @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; 
+0

Огромное спасибо, это сработало блестяще! Все еще изучая переменную сторону MySQL, и это действительно помогло ей в перспективе. – Aeide

+0

Приятно слышать, сначала может быть немного головная боль, но они хорошо используются, и в ваших запросах они могут открыть гораздо больше возможностей. С такими вещами вам просто нужно помнить о том, что вы делаете - как только вы находитесь на верхнем уровне, вы можете изменить порядок, как вам нравится, но без изменения владельца, поскольку на этом этапе он исправлен :) (попробуйте добавить например «ORDER BY f.ownerName DESC» до конца) –

1

Mysql не поддерживает оконные функции, но это может быть сделано с переменными:

SET @num=0; 
SET @roll=''; 
SELECT `Roll Number`,`Owner Name`,`Owner Number` 
FROM 
(
SELECT `Roll Number`, 
`Owner Name`, 
(CASE WHEN @roll=`Roll Number` 
          THEN @num:[email protected]+1 ELSE 
          @num:=1 END) as `Owner Number`, 
@roll:=`Roll Number` 
FROM table1 
) as q; 

http://sqlfiddle.com/#!2/788a4/5

Смежные вопросы