猿问

Yii2,从时间戳中获取平均值

我有一个包含订单的基本表,其中有一个名为created_at的字段,它采用时间戳格式,我想获得每天创建的订单数量的平均值。


发现了另一个类似的问题,类似于我的问题,我在下面发布了这一问题,希望每个人都能理解我想要做什么。


//not working

$q = new \yii\db\Query();

$q->from('shopping_cart');

$total = $q->average('DATEDIFF(`created_at`, CURRENT_DATE())'); 


婷婷同学_
浏览 139回答 2
2回答

蓝山帝景

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();

慕莱坞森

我相信这比 Yii2 更多与 SQL 相关的问题。你需要的是(如果我理解正确的话):统计从年初到今天有多少天计算所有行数将这些数字相除即可得到平均值。我已经尝试过了,效果很好SELECT count(*) / (select round((unix_timestamp() - (select min(created_at) from table)) / 86400))from table;回到 Yii2:我相信你必须手动构建这个查询\Yii::$app->db->createCommand()
随时随地看视频慕课网APP
我要回答