Sql server 2005 SQL-聚合函数以从与MAX()相同的行中获取值
我有一个表,其中列为channel、value和timestamp,另一个表有另外7列,其中包含各种数据 我将这两个元素结合在一起,我想在一小时内选择value列的最大值,以及相应行的时间戳。这是我尝试过的,但它(显然)不起作用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
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”列。