我有下一个数据:
id | name | amount | datefrom
---------------------------
3 | a | 8 | 2018-01-01
4 | a | 3 | 2018-01-15 10:00
5 | b | 1 | 2018-02-20
我可以将结果与下一个查询分组:
select name, max(amount) from table group by name
但我需要id
也是所选行的。因此我尝试过:
select max(id), name, max(amount) from table group by name
正如预期的那样,它返回:
id | name | amount
-----------
4 | a | 8
5 | b | 1
但我需要 id3
的金额8
:
id | name | amount
-----------
3 | a | 8
5 | b | 1
这可能吗?
附言。这是计费任务所必需的。有一天2018-01-15
配置的a
已更改,用户消耗了一些资源 10 小时,数量为8
当天休息 14 小时——3
。我需要用最大值来计算这样的一天。因此排与id = 4
2018-01-15 天被忽略。 (第二天 2018-01-16 我将计费金额3
)
所以我认为对行进行计费:
3 | a | 8 | 2018-01-01
如果有什么问题的话。我必须报告该行id == 3
是错的。
但是当我使用聚合函数时,有关的信息id
丢失了。
如果这可能的话那就太棒了:
select current(id), name, max(amount) from table group by name
select aggregated_row(id), name, max(amount) from table group by name
Here agg_row
引用聚合函数选择的行max
UPD
我将任务解决为:
SELECT
(
SELECT id FROM t2
WHERE id = ANY ( ARRAY_AGG( tf.id ) ) AND amount = MAX( tf.amount )
) id,
name,
MAX(amount) ma,
SUM( ratio )
FROM t2 tf
GROUP BY name
UPD
使用的话会好很多窗函数 https://stackoverflow.com/a/52556512/4632019