我需要从数据库中收集数据 基于上个月的创作。
以我为例
一个。 month_val 为个别月份
cur_month 是最后更新的月份
每个月 (cur_month) 我的用户都可以更新任何月份 (month_val) 的数据。
示例输出:
查询应该只返回上个月的数据。
在 1 月份 (cur_month 1),我添加了 1 月份和 2 月份的数据,即 month_val 1,2
在 2 月 (cur_month 2),我添加了 2 月、3 月的数据,即 month_val 2,3
...
在 12 月(cur_month 12)我添加了 3 月的数据,即 month_val 3。
基于此存储的数据。我必须根据 cur_month 收集最新的(标记为绿色的)month_val
希望我已经清楚地解释了我的问题。
我试过这种方式
SELECT * FROM proj_duration_map where cur_month=max(cur_month)
不好用
最佳答案
我认为您应该 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
关于mysql - 收集最大月份数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34195875/