[英]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.