2016-09-14 65 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

我不知道你为什么让这个连接'加入(选择@r:= 0,@ d:= 0)d'。我想这一个将其设置为零 –

+0

我想'月'你的意思是**月和年**,对吧?无论如何,您应该选择所有记录的提取月份和年份,并按“month_year asc,revenue desc”排序。 – FDavidov

回答

1

您必须更改变量@d初始化为的值。因此,而不是:

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

使用:

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

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