sql - 涉及一个月内列平均值的复杂查询
问题描述
我有一张像这样的桌子,名字是 tv_v2.tv_momentum
tv_date instrument_name factor
2019-07-22 cbc267f7-6ace-4357-a803-7aaf96a2cc48 50.1228599355797
2019-07-23 cbc267f7-6ace-4357-a803-7aaf96a2cc5a 50.0851750766468
2019-07-24 cbc267f7-6ace-4357-a803-7aaf96a2cc48 50.0474332287848
2019-07-25 cbc267f7-6ace-4357-a803-7aaf96a2cc31 50.0096342626235
2019-07-26 cbc267f7-6ace-4357-a803-7aaf96a2cc48 50.312332423432343
2019-07-27 cbc267f7-6ace-4357-a803-7aaf96a2cc48 23.424234234234
2019-07-28 cbc267f7-6ace-4357-a803-7aaf96a77777 15.33333332332323
2019-07-29 cbc267f7-6ace-4357-a803-7aaf96a2cc48 66.3333333333333
2019-07-30 cbc267f7-6ace-4357-a803-7aaf96a2cc4f 77.322332323223
2019-07-31 cbc267f7-6ace-4357-a803-7aaf96a2cc4s 50
我想获得每个仪器每月的平均因子以及该月最后一天的因子..您能帮我设计查询吗?
YEAR MONTH END_OF_MONTH_DAY INSTRUMENT_NAME AVERAGE_FACTOR_OVER_THE_MONTH END_OF_THE_MONTH_FACTOR
2019 7 31-7 cbc267f7-6ace-4357-a803-7aaf96a2cc48 50.11 50
2019 8 31-8 cbc267f7-6ace-4357-a803-7aaf96a2cc48 33 56
解决方案
您可以使用条件聚合:
select year(tv_date), month(tv_date), max(tv_date),
instrument_name,
avg(factor),
max(case when seqnum = 1 then factor end)
from (select t.*,
row_number() over (partition by year(tv_date), month(tv_date) order by tv_date desc) as seqnum
from t
) t
group by year(tv_date), month(tv_date), instrument_name;
推荐阅读
- python - 忽略行首的大写单词,用正则表达式替换其他单词?
- c# - 为什么此 Roslyn 分析仪测试失败?
- javascript - Javascript类原型中的函数语句和函数表达式有什么区别?
- flutter - 如何在 Flutter 中进行芯片按键设计
- css - 设置根字体大小不影响 Safari 中的边距、填充等 rem 单位
- javascript - 如何在 JavaScript 中访问函数调用上下文?
- c# - 有什么方法可以让 C# 编译器在编译时检查更多?
- javascript - 有自定义图表的方法吗?
- javascript - React Hooks - 使用 prevState 时防止重新渲染
- c# - 文本文件编写器和阅读器不适用于我的 WPF