如何返回每个部门的最大值的行,以及如果同一部门的两行或多行具有相同的值(包括结果中的那些行)?

例如,我有下表:

Name Code Date Value
Finance ABC12 2020-05-12 15
Finance ABC12 2020-06-24 118
Marketing BBG43 2020-05-12 12
Marketing BBG43 2021-08-07 1
Tech PKY76 2020-07-21 7
Tech PKY76 2020-11-28 7

我希望返回每个部门具有最大值的行.如果部门在不同的日期具有相同的最大值,则返回所有这些天.

例如,我想要的输出是:

Name Code Date Value
Finance ABC12 2020-06-24 118
Marketing BBG43 2020-05-12 12
Tech PKY76 2020-07-21 7
Tech PKY76 2020-11-28 7

到目前为止,我有这样的代码:

SELECT 
Name
,Code
,MAX(Date)
,MAX(Value) AS Total 
FROM Department 
GROUP BY 
Name
,Code

显然,这样做的问题是我不想只获得Max Date,但我不知道如何在不使用GROUP BY的情况下将该日期包括在输出中.因此,我只获得每个部门的最新日期的结果,如果是同一部门的多行,则只包括一个.

推荐答案

你可以试试这个

CREATE TABLE Department (
name VARCHAR(50) NOT NULL,
code VARCHAR(100) NULL,
date DATETIME NULL,
Value INT NULL
);
INSERT INTO Department VALUES('Finance', 'ABC12', '2020-05-12', 15);
INSERT INTO Department VALUES('Finance', 'ABC12', '2020-06-24', 118);
INSERT INTO Department VALUES('Marketing', 'BBG43', '2020-05-12', 12);
INSERT INTO Department VALUES('Marketing', 'BBG43', '2021-08-07', 1);
INSERT INTO Department VALUES('Tech', 'PKY76', '2020-07-21', 7);
INSERT INTO Department VALUES('Tech', 'PKY76', '2020-11-28', 7);


SELECT D.Name, D.Code, D.Date, T.MAX_VALUE 
FROM Department D
INNER JOIN (
SELECT Name,Code,MAX(Value) AS MAX_VALUE 
FROM Department 
GROUP BY Name,Code
) T ON D.CODE=T.CODE AND D.Value = T.MAX_VALUE;

以后请分享创建表和插入脚本.对我们来说,提供解决方案很容易.

Mysql相关问答推荐

如何将MySQL与AS&Quot;语法一起用于存储过程返回的表?

数组上的MySQL、JSON_CONTAINS用法

运行简单查询时Prisma预准备语句错误

无法确定查询逻辑

警告:MYSQL_OPT_RECONNECT 已弃用

为什么MySQL不同版本的值会变化?

根据 MySql 中同一表中的多列 Select 多列

MYSQL 8.0 - 从 INFORMATION_SCHEMA.COLUMNS 获取表列重新调整其他不相关的列

状态为已发货的订单返回产品总数量的SQL(不同的两张表)

如何在 axios 请求中将更新的设置状态值作为参数传递

SQL使用LIMIT获取结果和结果中的行数

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

基于 2 列的重复行的 SQL 查询

估计行数 SQL

提高mysql导入速度

如何在mysql中连接整数(整数和整数)和varchar(nvarchar和varchar)等数据类型?

#1146 - 表 'phpmyadmin.pma_recent' 不存在

MySQL使用phpmyadmin重新排列列的顺序

比较 MySQL 中的日期忽略 DateTime 字段的时间部分

PHP MYSQL - 插入不使用列名但使用自动增量字段