我有一個 mysql 資料庫,它有一個銷售表,代表每天銷售的產品串列,其中包含產品名稱、價格和 created_at 列。例如,我可以通過這樣做獲得某一天的銷售額;
$sales = Sale::where('created_at', $certain_day')->count();
但是,我需要跟蹤數周內每周的銷售額,例如從本周初(星期日)到現在為止銷售的產品數量、上周的銷售數量、兩周前的銷售數量等等在過去五周內,作為陣列回傳(類似于:[{30/12/2021: 10}, {25/12/2021: 15}, {18/12/2021: 22}]。如何我可以撰寫 laravel eloquent 查詢來實作這一點嗎?
uj5u.com熱心網友回復:
嘗試這樣的事情:
$from = date('2018-01-01');
$to = date('2018-05-02');
Sale::whereBetween('created_at', [$from, $to])->get();
然后你可以在本周,上周,下周使用Carbon方法
Sale::whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])->get();
@更新
Sale::selectRaw('*,UNIX_TIMESTAMP(created_at) DIV '.$sec. ' as group_date')->groupBy('group_date');
對于周,月和日,你可以做
->groupBy(function($data) {
// day
return Carbon::parse($data->created_at)->format('Y-m-d');
//month
return Carbon::parse($data->created_at)->format('Y-m');
//week
return Carbon::parse($data->created_at)->format('W');
})
uj5u.com熱心網友回復:
以下查詢為您提供過去 5 周內每周的銷售計數:
SELECT FROM_DAYS(TO_DAYS(created_at) - MOD(TO_DAYS(created_at), -1, 7)) AS weeklyGrouping , COUNT(*) AS sales_count
FROM sales
GROUP BY weeklyGrouping
ORDER BY weeklyGrouping DESC
LIMIT 5
上面的公式假設星期日是一周的第一天,如果您的星期從星期一開始,請將 -1 更改為 -2。
有關描述性資訊,您可以參考這篇文章。
編輯(雄辯的查詢構建器風格)
$sales = Sale::selectRaw('COUNT(*) AS sales_count')
->selectRaw('FROM_DAYS(TO_DAYS(created_at) - MOD(TO_DAYS(created_at), -1, 7)) AS weeklyGrouping')
->groupBy('weeklyGrouping')
->orderBy('weeklyGrouping', 'DESC')
->take(5);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399390.html
上一篇:一次選擇與職業相近的學生姓名
