簡體   English   中英

在 SQL 中返回每個組具有最大值的行,包括具有相同值的行

[英]In SQL return rows with max value for each group, including rows that have the same value

如何為每個部門返回具有最大值的行,如果同一部門的兩行或多行具有相同的值,則結果中包含這些值?

例如,我有下表:

姓名 代碼 日期 價值
金融 ABC12 2020-05-12 15
金融 ABC12 2020-06-24 118
營銷 BBG43 2020-05-12 12
營銷 BBG43 2021-08-07 1
科技 PKY76 2020-07-21 7
科技 PKY76 2020-11-28 7

我想返回每個部門具有最大值的行。 如果一個部門在不同日期具有相同的最大值,則返回所有這些日期。

例如,我想要的 output 將是這樣的:

姓名 代碼 日期 價值
金融 ABC12 2020-06-24 118
營銷 BBG43 2020-05-12 12
科技 PKY76 2020-07-21 7
科技 PKY76 2020-11-28 7

到目前為止,我有這個代碼:

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

顯然,這個問題是我不想只獲得 MAX 日期,但我不知道如何在 output 中包含日期而不在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;

將來請分享創建表和插入腳本。 我們很容易提供解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM