Как вы группируете по нескольким условиям на агрегированную функцию sql. Например у меня есть две таблицы Sales
и Accounts
Несколько условий на sql Агрегатная функция
Sales
ID | identifier_one | identifier_two | quantity | date
1 | 1 | A1 | 1 | 2017-01-01
2 | 1 | B1 | 1 | 2017-01-01
3 | 1 | A1 | 1 | 2017-01-02
запрос должен заполнить таблицу счетов, как так
Accounts
ID | identifier_one | identifier_two | current_month | current_year
1 | 1 | A1 | 2 | 2
2 | 1 | B1 | 1 | 1
Я имел этот запрос, но это займет на счете identifier_one
, поэтому в этом примере обе записи в учетной записи s будет иметь 3
и 3
$sales = DB::select('SELECT
identifier_one,
SUM(IF(YEAR(`date`) = YEAR(CURDATE()), quantity, 0)) AS current_year,
SUM(IF(YEAR(`date`) = YEAR(CURDATE()) AND MONTH(`date`) = MONTH(CURDATE()), quantity, 0)) AS current_month,
SUM(IF(YEAR(`date`) = YEAR(CURDATE()) - 1, quantity, 0)) AS last_year,
SUM(IF(YEAR(`date`) = YEAR(CURDATE()) AND MONTH(`date`) = MONTH(CURDATE()) - 1, quantity, 0)) AS last_month
FROM sales
GROUP BY identifier_one');
foreach ($sales as $sale) {
DB::table('accounts')
->where([
['identifier_one', '=', $sale->identifier_one]
])
->update([
'current_year' => $sale->current_year,
'current_month' => $sale->current_month,
'last_month' => $sale->last_month,
'last_year' => $sale->last_year
]);
}
Может быть, я что-то отсутствует, но только через запятую и имя поля Int а групповую .... 'GROUP BY identifier_one, identifier_two' и если вы хотите добавить identifier_two в избранных. – xQbert