Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 2005 SQL-聚合函数以从与MAX()相同的行中获取值_Sql Server 2005_Group By_Max - Fatal编程技术网

Sql server 2005 SQL-聚合函数以从与MAX()相同的行中获取值

Sql server 2005 SQL-聚合函数以从与MAX()相同的行中获取值,sql-server-2005,group-by,max,Sql Server 2005,Group By,Max,我有一个表,其中列为channel、value和timestamp,另一个表有另外7列,其中包含各种数据 我将这两个元素结合在一起,我想在一小时内选择value列的最大值,以及相应行的时间戳。这是我尝试过的,但它(显然)不起作用 SELECT v.channel, MAX(v.value), v.timestamp, i.stuff, ... FROM Values v INNER JOIN @Information i ON i.type

我有一个表,其中列为channel、value和timestamp,另一个表有另外7列,其中包含各种数据

我将这两个元素结合在一起,我想在一小时内选择value列的最大值,以及相应行的时间戳。这是我尝试过的,但它(显然)不起作用

SELECT
    v.channel,
    MAX(v.value),
    v.timestamp,
    i.stuff,
    ...
FROM
    Values v
INNER JOIN
    @Information i
ON i.type = v.type
GROUP BY channel, DATEPART(HOUR, timestamp), i.stuff, ...
我(毫不奇怪)得到了以下错误:

“dbo.Values.timestamp”在select列表中无效,因为它未包含在聚合函数或GROUP BY子句中

如何正确执行此操作?

您可以根据需要使用()或()功能来获得结果。比如:

;WITH RankedResults AS
(
    SELECT
        channel,
        value,
        timestamp,
        type,
        RANK() OVER (PARTITION BY DATEPART(hour,timestamp) ORDER BY value desc) as Position
    FROM
        Values
)
SELECT
   v.channel,
   v.value,
   v.timestamp,
   i.stuff
   /* other columns */
FROM
   RankedResults v
       inner join
   @Information i
       on
           v.type = i.type
WHERE
   v.Position = 1
(到底是使用秩还是密集秩取决于在领带的情况下你想做什么)

(根据Tomas的评论,编辑SQL以包含联接)

您可以根据需要使用()或()功能来获得结果。比如:

;WITH RankedResults AS
(
    SELECT
        channel,
        value,
        timestamp,
        type,
        RANK() OVER (PARTITION BY DATEPART(hour,timestamp) ORDER BY value desc) as Position
    FROM
        Values
)
SELECT
   v.channel,
   v.value,
   v.timestamp,
   i.stuff
   /* other columns */
FROM
   RankedResults v
       inner join
   @Information i
       on
           v.type = i.type
WHERE
   v.Position = 1
(到底是使用秩还是密集秩取决于在领带的情况下你想做什么)


(根据Tomas的评论,编辑SQL以包含联接)

必须在GROUPBY子句中包含“v.timestamp”。
希望这对您有所帮助。

您必须在GROUPBY子句中包含“v.timestamp”。
希望这能对您有所帮助。

选择
DATEPART(小时,时间戳)
取而代之?@Amber,不幸的是,我需要准确的时间,而不仅仅是小时部分。选择
DATEPART(小时,时间戳)
取而代之?@Amber,不幸的是,我需要准确的时间,不仅仅是小时部分。虽然我想得太多了-排名第一的ties总是排在第1位,所以在这种情况下RANK和DENSE_RANK完全相等-如果你需要消除ties,你必须在ORDER BY子句中添加更多描述列。我应该在哪个select语句中进行连接?嗯。。。我刚刚意识到这并不是我想要的。它不是为每个不同的其他属性集(instrumentType,我在原始post、channel和instrumentId中称之为type)提供最大值,而是获取总体最大值。如何将其设置为“group by”这些其他列?@Tomas-PARTITION by子句有效地标识了RANK函数将在其中确定位置的组-因此在其中添加额外的“group by”列。尽管我想得太多了,但排名第一的ties始终获得位置1,因此,在这种情况下,秩和稠密秩是完全等效的-如果需要消除关系,则必须在ORDER BY子句中添加更多描述列。我应该在哪个select语句中进行连接?嗯。。。我刚刚意识到这并不是我想要的。它不是为每个不同的其他属性集(instrumentType,我在原始post、channel和instrumentId中称之为type)提供最大值,而是获取总体最大值。如何将其设置为“GROUPBY”这些其他列?@Tomas-PARTITION by子句有效地标识了RANK函数将在其中确定位置的组-因此在其中添加额外的“GROUPBY”列。