2015-05-04 3 views
1

как вернуть столбец результатов, как показано ниже, используя mySql? Такая же дата вернет тот же результат.mySql, с той же самой группой

ВХОД:

date col | Desc 
02 - Apr | abcd 
02 - Apr | qwer 
02 - Apr | fsdfx 
06 - Apr | vsdc 
07 - Apr | vsdv 
07 - Apr | fpow 

DESIRED ВЫВОД:

date col | Desc | Result 
02 - Apr | abcd | 1 
02 - Apr | qwer | 1 
02 - Apr | fsdfx | 1 
06 - Apr | vsdc | 2 
07 - Apr | vsdv | 3 
07 - Apr | fpow | 3 
+0

предоставить более подробную информацию с помощью вашей схемы данных и таблиц –

+0

Опубликовать желаемый результат. – potashin

+0

Вы имеете в виду увеличивающееся число для каждой даты? – fancyPants

ответ

0

вам нужен агрегат вместе с group by в зависимости от семантики "результата": мин, макс, ср, сумма - как:

SELECT sum(Result) from tab1 group by date_col 
1
select 
t.* 
, @n := if(@prev != `date col`, @n + 1, @n) as result 
, @prev := `date col` 
from 
t 
, (select @prev := null, @n := 1) v 
order by `date col` 
  • увидеть его работы вживую в sqlfiddle

Логика такова:

Этот кросс-присоединился запрос

, (select @prev := null, @n := 1) v 

инициализирует переменные.

Затем в предложении select мы сначала проверяем, отличается ли дата от предыдущей строки. Если да, увеличьте переменную.
В следующей строке мы присваиваем значение текущей строке переменной. Поэтому, когда предложение select обрабатывается снова, в первой строке оно имеет «предыдущее» значение, в следующей строке назначается текущее значение.

Предложение order by есть, поскольку в реляционной базе данных нет порядка, если вы не указали его. Опустите его, и вы получите неправильные результаты.

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