2015-12-10 54 views
1

我需要根據上個月創建的數據庫 收集數據。收集最大月份數據

enter image description here

在我的情況

一個。 month_val是個別月份

b。 cur_month最後更新月份

每個月(cur_month)我的用戶都可以更新任何月份(month_val)的數據。

輸出示例:

enter image description here

查詢應只返回上個月的數據。爲一月,二月是month_val 1,2

二月月(cur_month 2)

一月月(cur_month 1)我已經加入數據我已經添加了二月,三月的數據是month_val 2,3

...

在12月當月(cur_month 12)我已經加入數據,三月是month_val 3

enter image description here

基於此存儲的數據。我必須收集基於cur_month的最新(標記的綠色)month_val

希望我已經清楚地解釋了我的問題。

我這樣

SELECT * FROM proj_duration_map where cur_month=max(cur_month) 

嚴重試過它不工作在SELECT

+1

? –

+0

您的意思是查詢可以檢索最新的cur_month? 例如,year_val&cur_month ='2016-12'。 –

+2

這似乎是日期列戰略的一個糟糕的選擇 – Drew

回答

1

我想你應該是GROUP BY 4第一欄。

MSSQL,您可以使用ROW_NUMBER選擇MAXMONTH

SELECT * FROM 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER(PARTITION BY pid, week_val, month_val, year_val 
         ORDER BY cur_month DESC) AS RN 
    FROM proj_duration_map 
) AS A 
WHERE RN = 1 --choose MAX cur_month (ORDER DESC) 

MySQL,你可以使用COUNT,而不是您正在使用哪個數據庫,MySQL或SQL服務器ROW_NUMBER

SELECT * FROM (
    SELECT A.pid, A.week_val, A.month_val, A.year_val, A.cur_month, 
      Count(*) as RN 
    FROM proj_duration_map A 
    INNER JOIN proj_duration_map B 
     ON A.pid = B.pid 
     AND A.week_val = B.week_val 
     AND A.month_val = B.month_val 
     AND A.year_val = B.year_val 
     AND A.cur_month >= B.cur_month 
    GROUP BY A.pid, A.week_val, A.month_val, A.year_val, A.cur_month 
) AS C 
WHERE RN = 1 
+0

如果他使用MySQL,則不支持分析功能分區 – Bee157

+0

我添加了MySQL我的代碼,tks –

+0

我已經更新了我的問題再次 – ManiMuthuPandi

0
SELECT month_val, year_val, cur_month FROM proj_duration_map 
    where cur_month=max(cur_month) 
    group by month_val, year_val, cur_month 

字段列表必須相同GROUP BY的。

+0

我會付給你不寫這樣的代碼:P – Drew

+0

我知道它會導致性能問題:p –

+0

你的查詢只返回十二(12)個月的數據,我需要所有的最新數據。 – ManiMuthuPandi