teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記

2021/07/20 01:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -82,4 +82,25 @@
82
82
  自分が考えるに、$val->prev_date == $row->dateで日付が一致したデータは昨年のデータも含めて計算が走り、日付が一致しないばあいは!isset($val->prev_date)の処理がはしると思っています。
83
83
 
84
84
  しかし、現状は、現在の日付(今年)は正常に計算しているのですが、昨年の計算処理は全て昨年の最初の日付で全て計算してしまいます。
85
- (例:2021-06-08と2020-06-08で計算。2021-06-10と2020-06-08で計算。やりたいことは、2021-06-10は2020-06-10で計算。)
85
+ (例:2021-06-08と2020-06-08で計算。2021-06-10と2020-06-08で計算。やりたいことは、2021-06-10は2020-06-10で計算。)
86
+
87
+
88
+ 追記
89
+ ```
90
+ amtは金額
91
+ foreach ($lastDate as $val) {
92
+
93
+ $result = DB::table('posts')
94
+ ->when(($val->prev_date == $row->date), function ($query) use ($val) {
95
+ return $query->selectRaw('DATE_FORMAT(created_at, "%Y%m%d") as date')
96
+ ->selectRaw('SUM(amt) AS amount')
97
+ ->selectRaw('SUM(amt) / SUBDATE(SUM(amt), SUBDATE(DATE_FORMAT(created_at, "%Y%m%d"), INTERVAL 1 YEAR)) AS amount_ratio');
98
+
99
+ })
100
+ ->when((!isset($val->prev_date)), function ($query) {
101
+ return $query->selectRaw('DATE_FORMAT(created_at, "%Y%m%d") as date')
102
+ ->selectRaw('SUM(amt) AS total_amount')
103
+ ->selectRaw('SUM(amt) / 0 AS amount_ratio');
104
+ )}
105
+ ->get();
106
+ ```