我需要从数据库中收集数据 基于上个月的创作。
就我而言
一个。 month_val是个月
湾cur_month是上次更新的月份
每个月(cur_month)我的用户可以更新任何月份的数据(month_val)。
示例输出:
查询应仅返回上个月的数据。
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。
基于此存储的数据。我必须根据cur_month收集最新的(标记为绿色)month_val
希望我已经清楚地解释了我的问题。
我试过这种方式
SELECT * FROM proj_duration_map where cur_month=max(cur_month)
很糟糕,它不起作用
答案 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的字段列表相同。