簡體   English   中英

Yii2,從時間戳中獲取平均值

[英]Yii2, get an average value from timestamps

我有一個帶有訂單的基本表,其中有一個名為 created_at 的字段,它采用時間戳格式,我想獲得每天創建多少訂單的平均值。

找到了另一個類似的問題,類似於我在下面發布的問題,希望每個人都能理解我想要做什么。

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

我相信與 SQL 相關的問題比 Yii2 更多。 您需要的(如果我理解正確的話)是:

  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 model class:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM