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

hl0ma9xz  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(382)

我有一个包含订单的基本表,它有一个名为created\的字段,它是时间戳格式的,我想得到每天创建多少订单的平均值。
找到了另一个类似的问题,像我的问题,我已经张贴在下面,希望每个人都明白我想做什么。

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

cedebl8k1#

方法 average$q->average('DATEDIFF('created_at', CURRENT_DATE())'); 只是增加了 AVG(DATEDIFF('created_at', CURRENT_DATE())) 到sql命令。
正如jirisemmler所说,您要做的是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();
ubof19bj

ubof19bj2#

我相信这比yii2更像是sql相关的问题。你需要的(如果我理解正确的话)是:
计算从开始到今天的天数
数一数所有的行
除以这些数字得到平均数。
我试过这个,效果很好

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

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

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

相关问题