Запросите различия между записями с одинаковым идентификатором - PullRequest
0 голосов
/ 04 мая 2020

У меня есть такая таблица в MS Access 2019:

+-----------+------------+--------+----------+-------+
| BillingID |    Date    | RoomID | Electric | Water |
+-----------+------------+--------+----------+-------+
|         1 | 12/23/2018 |      4 |     1669 |   106 |
|         2 | 12/26/2018 |      1 |     5035 |   289 |
|         3 | 12/27/2018 |      6 |        0 |     0 |
|         4 | 12/31/2018 |      5 |     3158 |   223 |
|         5 | 1/6/2019   |      2 |     3823 |   194 |
|         6 | 1/15/2019  |      3 |     1772 |   125 |
|         7 | 1/23/2019  |      4 |     1796 |   117 |
|         8 | 1/26/2019  |      1 |     5231 |   299 |
|         9 | 1/27/2019  |      6 |        0 |     0 |
|        10 | 1/31/2019  |      5 |     3366 |   242 |
|        11 | 2/14/2019  |      2 |     3975 |   201 |
|        12 | 2/15/2019  |      3 |     1839 |   129 |
+-----------+------------+--------+----------+-------+

Я могу рассчитать потребление электроэнергии и воды с помощью Index & Match в MS Excel. Тем не менее, у меня было много проблем, чтобы достичь этого с MS Access. Я хочу получить следующий результат:

+-----------+------------+--------+----------+---------------+-------+------------+
| BillingID |    Date    | RoomID | Electric | ElectricUsage | Water | WaterUsage |
+-----------+------------+--------+----------+---------------+-------+------------+
|         1 | 12/23/2018 |      4 |     1669 |               |   106 |            |
|         2 | 12/26/2018 |      1 |     5035 |               |   289 |            |
|         3 | 12/27/2018 |      6 |        0 |               |     0 |            |
|         4 | 12/31/2018 |      5 |     3158 |               |   223 |            |
|         5 | 1/6/2019   |      2 |     3823 |               |   194 |            |
|         6 | 1/15/2019  |      3 |     1772 |               |   125 |            |
|         7 | 1/23/2019  |      4 |     1796 |           127 |   117 |         11 |
|         8 | 1/26/2019  |      1 |     5231 |           196 |   299 |         10 |
|         9 | 1/27/2019  |      6 |        0 |               |     0 |            |
|        10 | 1/31/2019  |      5 |     3366 |           208 |   242 |         19 |
|        11 | 2/14/2019  |      2 |     3975 |           152 |   201 |          7 |
|        12 | 2/15/2019  |      3 |     1839 |            67 |   129 |          4 |
+-----------+------------+--------+----------+---------------+-------+------------+

Например, для RoomID = 4, ElectricUsage - это разница между Electri c в BillingID # 7 и BillingID # 1 и т. Д.

Я пытался ответить на некоторые вопросы, например это или это , но Access столкнулся с ошибками при использовании этих решений в представлении SQL ( Синтаксическая ошибка в предложении FROM ).

Спасибо.

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете использовать пару подзапросов для возврата электричества / воды для каждой комнаты в предыдущую дату:

SELECT
B.BillingID, B.BillingDate, B.RoomID, B.Electric,
B.Electric-(SELECT TOP 1 E.Electric FROM tblBilling AS E WHERE B.RoomID=E.RoomID AND E.BillingDate<B.BillingDate ORDER BY E.BillingDate DESC) AS ElectricUsage,
B.Water,
B.Water-(SELECT TOP 1 W.Water FROM tblBilling AS W WHERE B.RoomID=W.RoomID AND W.BillingDate<B.BillingDate ORDER BY W.BillingDate DESC) AS WaterUsage
FROM tblBilling AS B

Обратите внимание, что я переименовал ваше поле Date в BillingDate, так как Дата является зарезервированным словом в Access и может вызвать проблемы в будущем.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...