我有一个看起来像这样的数据集(还有其他列,但这些是相关的列):
**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'
我检查了数据,并且没有零,但事实上它在第一行让我相信我正在做的事情正在改变为零。有什么想法吗?
答案 0 :(得分:1)
您必须更改变量@d
初始化的值。所以而不是:
(select @r:=0,@d:=0)
使用:
(select @r:=0,@d:='1900-01-01')
我的猜测是你的表中没有使用日期'1900-01-01'
。这样可以毫无问题地执行CASE
表达式的比较。