Sql 我如何在组中按最大值设置条件
我想按日期对数据进行分组,然后找到不同“代码”的最大“值”。我如何做到这一点?我想为Sql 我如何在组中按最大值设置条件,sql,sql-server,Sql,Sql Server,我想按日期对数据进行分组,然后找到不同“代码”的最大“值”。我如何做到这一点?我想为MAX()提供一个条件,但我认为这是不可能的 栏目: Date: date Time: time Value: float Code: varchar SELECT MAX([Value] where [Code]='GOLD') AS BestGold, MAX([Value] where [Code]='SILVER') AS BestSilver FROM [MyTable] GROUP
MAX()
提供一个条件,但我认为这是不可能的
栏目:
Date: date
Time: time
Value: float
Code: varchar
SELECT MAX([Value] where [Code]='GOLD') AS BestGold,
MAX([Value] where [Code]='SILVER') AS BestSilver
FROM [MyTable]
GROUP BY [Date]
相反,使用这个
SELECT
[Date],
[Code],
MAX([Value]) AS Best
FROM [MyTable]
where cODE IN ('GOLD','SILVER')
GROUP BY [Date]
如果要将其作为单独的列,请尝试旋转相同的列
;WITH CTE
AS
(
SELECT
[Date],
[Code],
MAX([Value]) AS Best
FROM [MyTable]
where cODE IN ('GOLD','SILVER')
GROUP BY [Date]
)
SELECT
[Date],
BestGold = [GOLD],
BestSilver = [Silver]
FROM CTE
PIVOT
(
MAX(Best)
FOR
Code IN
(
[GOLD],[SILVER]
)
)P
您可以使用内联
iif
:
SELECT MAX(IIF([Code]='GOLD', [Value], null)) AS BestGold,
MAX(IIF([Code]='SILVER', [Value], null)) as BestSilver
FROM [MyTable]
GROUP BY [Date]
或案例
:
SELECT MAX(case [Code] when 'GOLD' then [Value] end) AS BestGold,
MAX(case [Code] when 'SILVER' then [Value] end) as BestSilver
FROM [MyTable]
GROUP BY [Date]
使用
大小写
表达式:
SELECT
MAX(CASE WHEN [Code]='GOLD' THEN ['Value'] END) AS BestGold,
MAX(CASE WHEN [Code]='SILVER' THEN ['Value'] END) AS BestSilver
FROM [MyTable]
GROUP BY [Date];
这里的想法是,
MAX
函数将只考虑每种类型代码的记录值。我相信您需要以下内容:-
DECLARE @TestCodes Table
(
Date date,
Time time,
Value float,
Code varchar(10)
)
INSERT INTO @TestCodes
VALUES
('2017-08-09','12:00',19900,'Gold'),
('2017-08-09','12:00',15001,'Gold'),
('2017-08-09','12:00',2500,'Gold'),
('2017-08-09','12:00',1200.01,'Metal'),
('2017-08-09','12:00',1900,'Metal'),
('2017-08-09','12:00',1800.1,'Silver'),
('2017-08-09','12:00',1100.01,'Silver'),
('2017-08-09','12:00',100.11,'Silver')
SELECT Date,Code,Max(value) AS MAXPriceOnAnyDate
FROM @TestCodes
GROUP BY [Date],CODE
您可以使用
case
SELECT
MAX(CASE WHEN Code='GOLD' THEN [VALUE] ELSE -1 END) AS BestGold,
MAX(CASE WHEN Code='SILVER' THEN [VALUE] ELSE -1 END) AS BestSilver
FROM [MyTable]
GROUP BY [Date];
你认为其中一个会更快吗?我不这么认为,尽管我还没有做过研究。