php - 获取按天分组的行的最小值和最大值
问题描述
我想用 Laravel Eloquent 返回按 Day 分组的每条记录的最小值和最大值,所以这里是:
表结构:速率
id buy_rate sell_rate market_currency_id created_at
== ======== ========= ================== ==========
1 10 7 44 2020-10-10
2 10 9 44 2020-10-10
3 10 8 44 2020-10-10
4 10 12 44 2020-10-11
5 10 14 44 2020-10-11
6 10 13 44 2020-10-11
现在我得到这样的数据:
$rates = Rate::
select('sell_rate', \DB::raw("DATE_FORMAT(created_at, %Y-%m-%d) day))
->where('market_currency_id', '=', 44)
->whereBetween('created_at', [2020-10-10, 2020-10-11])
->orderBy('created_at', 'ASC')
->get()
->toArray();
上面的代码返回:
0 => array:2 [▼
"sell_rate" => "8"
"day" => "2010-10-10"
]
1 => array:2 [▼
"sell_rate" => "12"
"day" => "2010-10-11"
]
现在,我想要的是得到这样的东西:
0 => array:2 [▼
"sell_rate" => "8"
"day" => "2010-10-10"
"min_rate" => "7"
"max_rate" => "9"
]
1 => array:2 [▼
"sell_rate" => "13"
"day" => "2010-10-11"
"min_rate" => "12"
"max_rate" => "14"
]
我尝试了很多方法,但我无法得到我想要的,我尝试了这样的原始选择:
$rates = Rate::
select('sell_rate', \DB::raw("DATE_FORMAT(created_at, %Y-%m-%d) day))
->selectRaw("MIN(sell_rate) AS min_rate, MAX(sell_rate) AS max_rate")
->where('market_currency_id', '=', 44)
->whereBetween('created_at', [2020-10-10, 2020-10-11])
->orderBy('created_at', 'ASC')
->get()
->toArray();
但是无法得到我想要的,我也不能单独做,因为有数千行,提前谢谢!
解决方案
您还需要按天分组:
$rates = Rate::select(DB::raw("DATE_FORMAT(created_at, %Y-%m-%d) day"))
->selectRaw("MIN(sell_rate) AS min_rate, MAX(sell_rate) AS max_rate")
->where('market_currency_id', '=', 44)
->whereBetween('created_at', ['2020-10-10', '2020-10-11'])
->groupBy(DB::raw('day'))
->orderBy(DB::raw('day'))
->get()
->toArray();
推荐阅读
- bash - 循环遍历表并将多个参数解析到 Bash 中的脚本
- google-cloud-platform - GCP Metrics Explorer - “指标数据”历史?
- php - 如何使用 php mail() 函数将多个图像从不同的输入字段发送到电子邮件
- python - 如果存在于字典列表中,则检查和附加列表中的项目的最佳代码
- javascript - 将值从 foreach 循环存储到全局变量
- python - 为什么在循环中使用 `with as` 读取文件时没有释放内存?
- excel - 创建新行,然后复制并粘贴行
- xgboost - 加载 MLFlow 模型并使用特征名称绘制特征重要性
- reactjs - 如何在布局组件中插入内容组件
- sql - 检查表存储过程中是否已经存在两个值