【发布时间】:2016-01-15 20:01:21
【问题描述】:
列名:name、reading、channel、time
我目前正在尝试查找每个不同 name 的最大值。每个name 都有许多值,因为它以每小时一次的时间间隔读取。目标是找出每个不同name 的最大值并记录它发生的时间间隔。
到目前为止,我已经得到了这个代码:
SELECT name, max(reading) AS "max_reading", data, channel, time
FROM interval_data
GROUP BY name, data, channel
但是,这给了我一个错误,说 time 必须被聚合或分组。有没有什么简单的方法可以将最大值出现的时间附加到输出中,而不必对列执行分组/聚合函数?
样本数据:
NAME READING DATA CHANNEL TIME
1 1 1 1 1/15/2015 09:00
1 3 1 1 1/15/2015 10:00
1 2 1 1 1/15/2015 11:00
1 5 1 1 1/15/2015 12:00
2 2 1 1 1/15/2015 09:00
2 4 1 1 1/15/2015 10:00
2 6 1 1 1/15/2015 11:00
2 5 1 1 1/15/2015 12:00
3 7 1 1 1/15/2015 09:00
3 3 1 1 1/15/2015 10:00
3 5 1 1 1/15/2015 11:00
3 2 1 1 1/15/2015 12:00
期望的输出:(每个不同名称的最大读数和最大读数发生时的时间)
NAME READING DATA CHANNEL TIME
1 5 1 1 1/15/2015 12:00
2 6 1 1 1/15/2015 11:00
3 7 1 1 1/15/2015 09:00
【问题讨论】:
-
你在用什么rdbms?
-
时间列不在您的
group by子句中。 -
如果您能提供示例数据和所需的输出,将会很有帮助。不确定是否仅将 TIME 列添加到 group by 子句会解决您的问题
-
@RichardHamilton 它将解决错误,但会产生 OP 所需的输出。这是我的担心。
-
我没有解决这个问题,因为“时间”可能是一个时间戳,他将获得与不使用 MAX 时相同数量的行
标签: sql