Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何在组中按最大值设置条件_Sql_Sql Server - Fatal编程技术网

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];

你认为其中一个会更快吗?我不这么认为,尽管我还没有做过研究。