我有一个SQL视图"data",看起来如下所示:

CALMONTH COSTCENTER KONTONUMMER FIELDNM003
202212 Alpha 123 10
202301 Alpha 123 20
202210 Alpha 223 50
202307 Beta 123 10

我只想保留"COSTCENTER"和"KONTONUMMER"的组合,其中有一个或多个条目具有"CalibMONTH"= 202301.所需的输出是:

CALMONTH COSTCENTER KONTONUMMER FIELDNM003
202212 Alpha 123 10
202301 Alpha 123 20
202307 Beta 123 10

目前我只能在"COSTCENTER"一栏中这样做:

SELECT "t"."CALMONTH", "t"."COSTCENTER", "t"."KONTONUMMER", "t"."FIELDNM003"
FROM "data" AS t
INNER JOIN (
  SELECT "COSTCENTER"
  FROM "data"
  GROUP BY "COSTCENTER"
  HAVING MAX("CALMONTH") > 202301
) AS s ON s.COSTCENTER = t.COSTCENTER

推荐答案

您应该识别任何至少有一个"CalibMONTH"= 202301条目的COSTCENTER和Kontonummer对.找到这些对后,将它们与您的表连接起来以检索所有相应的行:

SELECT t.*
FROM mytable t
inner join (
  select COSTCENTER, Kontonummer
  from mytable
  where CALMONTH >= 202301
  group by COSTCENTER, Kontonummer
) as s on s.COSTCENTER = t.COSTCENTER
       and s.Kontonummer = t.Kontonummer;

Demo here

如果您使用的是mysql 8或更高版本,这是使用窗口函数MAX()的另一种方法:

select CALMONTH, COSTCENTER, Kontonummer, FIELDNM003
from (
  select *, max(CALMONTH) over (partition by COSTCENTER, Kontonummer) as max_CALMONTH
  from mytable
) as s
where max_CALMONTH >= '202301'

Mysql相关问答推荐

未知变量default-validation-plugin=mysql_native_passenger'

如何让Docker MySQL使用Unicode(utf-8)和初始化脚本?

如果WHERE语句包含所有列,唯一键顺序是否重要?

对多个数据库运行UPDATE mySQL查询

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

使用NOT EXISTS()时出现MySQL查询错误

如何根据购买的商品数量查找 unique_ids 的数量

如何同时从同一个表中 Select 从 SQL 表中删除行

Mysql Pivot 查询/建议

MySQL 使用了错误的索引

创建将列与多个值进行比较的索引

如何替换 SELECT 查询中重复记录的列?

非常规字符的不正确字符串值错误

了解 SQL 中的元组语法

为什么从我的 SQL 查询中删除 BINARY 函数调用会如此显着地改变查询计划?

使用 ON DUPLICATE KEY 将列增加一定数量 MySQL NodeJS

我将如何构建一个 SQL 查询来从交易表中 Select 第一次存款、第二次存款和额外存款

提高mysql导入速度

MySQL Workbench 无法加载 mysql.proc

考虑到 NodeJS,MySQL 和 MySQL2 有什么区别