2015-12-10 53 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