Выберите запрос, разница в датах с несколькими записями в MS Access
Я работаю над базой данных, но у меня проблемы с чем-то (всего нуб). Я пока не могу опубликовать изображения в этом аккаунте, я разместил ссылки на свои изображения. В основном у меня есть столик для бронирования и столик для комнаты. Я хотел сделать операцию Date Diff для каждой комнаты, умножить ее на стоимость аренды и сгруппировать по номеру комнаты. Конечный результат, который я пытался получить, выглядит следующим образом, после того как я скрываю разницу в датах, потому что она мне понадобится только для расчета.
<!DOCTYPE html>
<html>
<body>
<table style="width:100%">
<tr>
<th>Room Number</th>
<th>Total</th>
</tr>
<tr>
<td>1</td>
<td>375</td>
</tr>
<tr>
<td>2</td>
<td>375</td>
</tr>
<tr>
<td>3</td>
<td>1680</td>
</tr>
<tr>
<td>4</td>
<td>700</td>
</tr>
<tr>
<td>6</td>
<td>60</td>
</tr>
<tr>
<td>7</td>
<td>540</td>
</tr>
</table>
</body>
</html>
Я имею это как мой запрос SQL:
SELECT [Room Number],
DATEDIFF("d", min(CheckInDate), max(CheckOutDate)) as dif
FROM Reservations
GROUP by [Room Number]
Я еще не делал расчеты для части денег, так как я не могу даже заставить Datediff работать для каждой комнаты.
2 ответа
Я думаю, что вам нужно рассчитать дату для каждой пары номер-клиент, а затем сгруппировать по room_id. Вы можете умножить цену послесловия или во время группы на. Я не знаю MS-доступа, но по логике sql это должно выглядеть так:
SELECT [Room Number], SUM(DATEDIFF("d", CheckInDate, CheckOutDate)) * price_per_night as dif
FROM Reservations
GROUP by [Room Number]
Давайте предположим, что ваши заказы хранятся в таблице с названием "Бронирование", а информация о номерах хранится в таблице "Номера". Если вы хотите включить все номера, независимо от того, были ли они забронированы или нет, используйте это:
SELECT Rooms.[Room Number], Sum((Reservations.CheckOutDate-Reservations.CheckInDate)*Rooms.Price) AS [Total per room]
FROM Reservations RIGHT JOIN Rooms ON Reservations.[Room Number] = Rooms.[Room Number]
GROUP BY Rooms.[Room Number];
Замените RIGHT JOIN на INNER JOIN, если вас интересуют только забронированные номера.
PS Ваш пример HTML неверен для комнаты 7, он должен быть 1080 (9*120).