2016-09-14 63 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表達式的比較。