2013-09-12 1 views
1

Допустим, у меня есть таблица под названием customer_order:Mysql значение приращения в одной строке каждый раз, когда он читает то же значение в другой строке

id| cust#| counter 
1 1  1 
2 2  1 
3 1  2 
4 3  1 
5 2  2 
6 1  3 

Таким образом, идея есть, каждый раз, когда клиент (Каст #) повторяется, вы хотите увеличить счетчик, как показано выше. Мне нужно сделать это в инструкции SELECT во время запроса данных. Я использую чайник Pentaho для запроса данных из базы данных. Как я могу достичь этого?

спасибо.

ответ

1

Вы можете сделать это с чистым SQL, как:

update customer c 
    set counter = (select count(*) from customer c2 where c2.cust# = c.cust# and c2.id <= c.id); 

Приведенный выше должно быть довольно эффективным, если у вас есть индекс по customer(cust#, id).

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

EDIT:

Похоронен глубоко вниз, я вижу I want to do this in a select. К сожалению. Вот версия select:

select c.*, 
     (select count(*) from customer c2 where c2.cust# = c.cust# and c2.id <= c.id) as counter 
from customer c 
+0

Привет, Гордон. Спасибо за ваш быстрый ответ. Я забыл упомянуть, что cust # не является исходным полем в таблице, которое нужно создать в инструкции select только для обработки счетчика –

+0

@ TheGeorgia. , , Цитирую: «Допустим, у меня есть таблица с именем customer_order», за которой следуют три столбца «id | cust # | counter». Если у вас есть другой вопрос, создайте новый вопрос с соответствующей информацией. –

+0

@ TheGeorgia To Quote "Я забыл упомянуть, что cust # не является исходным полем в таблице, которое нужно создать в инструкции select только для обработки счетчика", пожалуйста, укажите это как комментарий по вопросу. Также, если cust # не является исходным столбцом, как вы его генерируете? – cjava

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