我一直在尝试从表中检索其他列,在该表中我正在执行聚合函数以按日期获取最小数目,这是数据的示例:
id resource date quality ask ask_volume
1 1 2020-06-08 10:50 0 6.9 5102
2 1 2020-06-08 10:50 1 6.8 2943
3 1 2020-06-08 10:50 2 6.9 25338
4 1 2020-06-08 10:50 3 7.0 69720
5 1 2020-06-08 10:50 4 7.0 9778
6 1 2020-06-08 10:50 5 7.0 297435
7 1 2020-06-08 10:40 0 6.6 611
8 1 2020-06-08 10:40 1 6.6 4331
9 1 2020-06-08 10:40 2 6.7 1000
10 1 2020-06-08 10:40 3 7.0 69720
11 1 2020-06-08 10:40 4 7.0 9778
12 1 2020-06-08 10:40 5 7.0 297435
...
这是我想要获得的理想结果,因此可以对其执行加权平均:
date ask ask_volume
2020-06-08 10:50 6.8 2943
2020-06-08 10:40 6.6 4331
...
尽管quality
0和quality
1具有相同的含义ask
,但quality
应选择1,因为它的ask_volume
值较高。
我尝试过经典的:
SELECT date, min(ask) FROM table GROUP BY date;
但是添加ask_volume
到列列表将迫使我也将其添加到列列表中GROUP BY
,从而弄乱了结果。
问题是:
ask_volume
的最小值的对应值ask
?ask
值相同的记录date
,我该如何ask_volume
显示一个具有最高值的记录?我使用PostgreSQL,但是来自其他数据库的SQL也将帮助我理解这个想法。
在标准SQL中,您将使用窗口函数:
select *
from (
select t.*, row_number() over(partition by date order by ask, ask_volume desc) rn
from mytable
) t
where rn = 1
在Postgres中,这更适合distinct on
:
select distinct on (date) *
from mytable
order by ask, ask_volume desc
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句