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

Yii2, get an average value from timestamps

我有一个基本的 table 订单,它有一个名为 created_at 的字段,它采用时间戳格式,我想了解每天创建的订单数量的平均值。

发现了另一个类似的问题,与我的问题类似,我已在下面发布,希望每个人都能理解我正在尝试做的事情。

//not working
$q = new \yii\db\Query();
$q->from('shopping_cart');
$total = $q->average('DATEDIFF(`created_at`, CURRENT_DATE())'); 

我相信它比 Yii2 更多 SQL 相关问题。你需要的(如果我没理解错的话)是:

  1. 统计从开始到今天的天数
  2. 计算所有行数
  3. 将这些数字相除得到平均值。

我已经试过了,效果很好

SELECT 
count(*) / (select round((unix_timestamp() - (select min(created_at) from table)) / 86400))
from table;

回到 Yii2:我相信你必须手动构建这个查询

\Yii::$app->db->createCommand()

$q->average('DATEDIFF('created_at', CURRENT_DATE())'); 中的方法 average 只是将 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 型号 class:

// Query count of records between dates
$total = Order::find()
  ->where(['between', 'created_at', $timeFrom, $timeTo])
  ->count();