2016-09-14 3 views
0

У меня есть набор данных, который выглядит следующим образом (есть и другие столбцы, но эти значимые из них):Нужна помощь, пытаясь причислить сгруппированных значения по месяцам

**Month  | Revenue | Segment**  
    01/01/2016 | $40,000 | Seg XYZ 

Я пытаюсь присвоить ранг каждый сегмент основан на доходах по месяцам. Поэтому, если в январе для второй части есть вторая строка в 30 000 долларов, у меня будет ранг 1 для первой строки и 2 для второй строки. Это повторяется через сегменты и месяцы.

Это мой запрос:

Select 
    a.* 
    <br>,case when @d=month then @r:[email protected]+1 
    <br>else @r:=1 end as rank 
    <br>,@d:=month as stuff 
<br>from 
    <br>(select month 
    <br>,sum(Revenue) as Revenue 
    <br>,segment from final_audience_usage_file 
    <br>group by month, segment) a 
<br>join 
    <br>(select @r:=0,@d:=0)d 
    <br>order by month, revenue desc 

я получаю эту ошибку: данных усечена: Неправильное значение даты: «0» для столбца «месяц» в строке 1

Я проверил данные , и нет нулей, но тот факт, что он находится в первой строке, заставляет меня поверить, что то, что я делаю, меняет это на ноль. Есть предположения?

+0

Я не знаю, почему вы делаете это объединение 'join (выберите @r: = 0, @ d: = 0) d'. Я предполагаю, что это устанавливает его в нуль –

+0

Я предполагаю, что по «месяцу» вы имеете в виду ** месяц и год **, правильно? В любом случае вы должны выбрать извлеченный месяц и год всех записей и упорядочить их с помощью 'month_year asc, income desc'. – FDavidov

ответ

1

Вы должны изменить значение, которое инициализируется переменной @d. Таким образом, вместо:

(select @r:=0,@d:=0) 

использования:

(select @r:=0,@d:='1900-01-01') 

Я думаю, что дата '1900-01-01' не используется в таблице. Таким образом, сравнение выражения CASE может быть выполнено без каких-либо проблем.

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