收集最大月份数据

时间:2015-12-10 07:19:28

标签: mysql sql-server

我需要从数据库中收集数据 基于上个月的创作。

enter image description here

就我而言

一个。 month_val是个月

湾cur_month是上次更新的月份

每个月(cur_month)我的用户可以更新任何月份的数据(month_val)。

示例输出:

enter image description here

查询应仅返回上个月的数据。

1月份(cur_month 1)我添加了Jan,Feb的数据,即month_val 1,2

2月份(cur_month 2)我添加了2月份的数据,3月份是月份2,3

...

12月份(cur_month 12)我添加了Mar的数据,即month_val 3。

enter image description here

基于此存储的数据。我必须根据cur_month收集最新的(标记为绿色)month_val

希望我已经清楚地解释了我的问题。

我试过这种方式

SELECT * FROM proj_duration_map where cur_month=max(cur_month)

很糟糕,它不起作用

2 个答案:

答案 0 :(得分:1)

我认为你应该GROUP BY 4个第一列。

MSSQL,您可以使用ROW_NUMBER选择MAX MONTH

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代替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

答案 1 :(得分:0)

>

SELECT中的字段列表必须与GROUP BY的字段列表相同。