Могу я предложить следующую идею:
- Получить все
sales
, упорядоченные по shop ASC, day ASC
. - Затем на вашем внутреннем языке (я использую PHP),напишите код, который получает в массиве
sales
в соответствии с numberOfDays
.
Вот полный пример в PHP, но вы можете использовать любой язык, который идет с MySQL, как вам нравится:
$connection = mysqli_connect("localhost", "root", "", "database_test");
$sql_query = "
SELECT *
FROM table_sales
ORDER BY shop ASC, day ASC
";
$result = mysqli_query($connection, $sql_query);
$numberOfDays = 3;
$daily_sales = array();
$total_sales = array();
$i = 0;
while($row = mysqli_fetch_array($result)) {
$daily_sales[$i] = $row;
$total_sales[$i] = $row;
$total_sales[$i]["sales"] = 0;
$offset = $i - $numberOfDays + 1;
if($offset < 0)
$offset = 0;
for($j = $offset; $j <= $i; $j++) {
if($total_sales[$i]["shop"] == $daily_sales[$j]["shop"])
$total_sales[$i]["sales"] += $daily_sales[$j]["sales"];
}
$i++;
}
mysqli_close($connection);
$total_sales
- это многомерный массив.Вы можете получить к нему доступ, например, так: $total_sales[0]["sales"]
, и он даст вам общую сумму продаж за numberOfDays
для конкретного магазина, который вы можете увидеть в $total_sales[0]["shop"]
.
Не забудьте сделатьобработка ошибок в функциях MySQLi, в противном случае, если результат не будет возвращен, массив будет пустым.
Если у вас есть какие-либо вопросы, пожалуйста, прокомментируйте, я с удовольствием помогу вам.
РЕДАКТИРОВАТЬ: Я неНе думаю, что возможно сделать то, что вы пытались достичь исключительно в MySQL, и я не думаю, что это нужно делать.Вот почему я объединил PHP с MySQL.
Кроме того, в зависимости от того, сколько у вас может быть тысяч продаж, было бы не очень хорошей идеей получить все результаты продаж в большом запросе.В качестве решения вы можете найти их специально для магазина.Изменения, которые необходимо внести в код, - это то, что SQL должен выглядеть так:
SELECT *
FROM table_sales
WHERE shop = ?
ORDER BY day ASC
И затем удалите эту строку, так как она становится ненужной:
if($total_sales[$i]["shop"] == $daily_sales[$j]["shop"])