2 回答

TA贡献1843条经验 获得超7个赞
average中的方法$q->average('DATEDIFF('created_at', CURRENT_DATE())');只是添加AVG(DATEDIFF('created_at', CURRENT_DATE()))到 SQL 命令中。
正如 Jiri Semmler 所说,您想要做的是 SQL 而不是 Yii。
您所需要做的就是找到您感兴趣的时间段内的记录数,并将其除以该时间段的天数。
它可以是这样的
// Define period
$timeFrom = '2018-11-30';
$timeTo = '2018-12-02';
// Number of days for the period
$days = date_diff(date_create($timeFrom), date_create($timeTo))->format("%a");
// Query count of records between dates
$q = new \yii\db\Query();
$total = $q->from('order')
->where(['between', 'created_at', $timeFrom, $timeTo])
->count();
// Find average records per day
$average = $total / $days;
如果你有Order模型类:
// Query count of records between dates
$total = Order::find()
->where(['between', 'created_at', $timeFrom, $timeTo])
->count();

TA贡献1810条经验 获得超4个赞
我相信这比 Yii2 更多与 SQL 相关的问题。你需要的是(如果我理解正确的话):
统计从年初到今天有多少天
计算所有行数
将这些数字相除即可得到平均值。
我已经尝试过了,效果很好
SELECT
count(*) / (select round((unix_timestamp() - (select min(created_at) from table)) / 86400))
from table;
回到 Yii2:我相信你必须手动构建这个查询
\Yii::$app->db->createCommand()
- 2 回答
- 0 关注
- 138 浏览
添加回答
举报