mysql - 收集最大月份数据

标签 mysql sql-server

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

enter image description here

以我为例

一个。 month_val 为个别月份

cur_month 是最后更新的月份

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

示例输出:

enter image description here

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

在 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。

enter image description here

基于此存储的数据。我必须根据 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/

相关文章:

mysql - Java EE 与 JPA,生成奇怪的数据库

mysql - 为什么 mysql 在可用时不使用索引

sql - 根据条件生成脚本

javascript - Sequelize - 无法绑定(bind)多部分标识符 XXX

sql-server - SQL Server 递归查询

mysql - 检查rails中是否存在记录

mysql - 如何从带有链接表的 3 个表中选择行?

mysql - 我的程序查询

c# - 执行大量并发 INSERT 时如何避免 "Violation of UNIQUE KEY constraint"

sql - 如何使用Golang直接从文件执行mssql脚本