需要帮助尝试按月对分组值进行排名

时间:2016-09-14 04:46:13

标签: mysql

我有一个看起来像这样的数据集(还有其他列,但这些是相关的列):

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

我正在尝试根据按月收入为每个细分指定排名。因此,如果1月份的第二行为30,000美元,则第一行的排名为1,第二行的排名为2。这将在不同的细分和数月内重复。

这是我的疑问:

Select
    a.*
    <br>,case when @d=month then @r:=@r+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

我一直收到此错误:数据被截断:日期值不正确:第1行第'月'列为'0'

我检查了数据,并且没有零,但事实上它在第一行让我相信我正在做的事情正在改变为零。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您必须更改变量@d初始化的值。所以而不是:

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

使用:

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

我的猜测是你的表中没有使用日期'1900-01-01'。这样可以毫无问题地执行CASE表达式的比较。