Я хотел бы сделать это следующим образом:
Сначала создать поиск на каждый день (найти первые и длится ReqNo), а затем присоединиться два раза в ежедневную таблицу и рассчитать изменения:
SELECT first_.MyDate,
first_.PrevVal AS StartOfDay,
last_.NewVal AS EndOfDay,
(last_.NewVal - first_.PrevVal) AS TotalChange
FROM
(SELECT mpd1.MyDate,
max(mpd1.RecNo) AS first_rec_no,
min(mpd1.RecNo) AS last_rec_no
FROM MutationsPerDay mpd1
GROUP BY MyDate) AS lo
JOIN MutationsPerDay AS first_ ON lo.first_rec_no = first_.RecNo
JOIN MutationsPerDay AS last_ ON lo.last_rec_no = last_.RecNo
Объяснение: То, что вы на самом деле хотите это: Для каждый деньпервый и последняя Значение (и разница). Так что вам нужно найти первое для каждого дня идентификатор из первого и последнего значения:
SELECT mpd1.MyDate,
max(mpd1.RecNo) AS first_rec_no,
min(mpd1.RecNo) AS last_rec_no
FROM MutationsPerDay mpd1
GROUP BY MyDate
----------------------------------------------------
| MyDate | first_rec_no | last_rec_no |
----------------------------------------------------
| 2016-12-05 00:00:00 | 16 | 13 |
| 2016-12-07 00:00:00 | 12 | 12 |
| 2016-12-12 00:00:00 | 11 | 8 |
| 2016-12-14 00:00:00 | 7 | 7 |
| 2016-12-20 00:00:00 | 6 | 6 |
| 2016-12-21 00:00:00 | 5 | 4 |
| 2016-12-28 00:00:00 | 3 | 3 |
| 2016-12-29 00:00:00 | 2 | 2 |
| 2016-12-30 00:00:00 | 1 | 1 |
----------------------------------------------------
Затем вы можете использовать эти первый и последние идентификаторы, чтобы найти соответствующие значения в источнике Таблица. Например, для 2016-12-21 вы получите строки с идентификаторами первым: 5 и последнее: 4
Запись PREVVAL нет 5 не представляет собой первое значение, которое вы видели в этот день и NewVal в записи № 4 представляет последнее значение, которое вы видели в этот день. Если вы вычтите их, вы получите изменение на этот день.
Надеюсь, это немного разъяснит методологию.
Оба ответа дают правильный результат! В обоих случаях я хотел бы получить некоторое объяснение. Я в значительной степени понимаю эти решения, однако я недостаточно опыт, чтобы создать такое решение самостоятельно. Не могли бы вы прояснить немного больше (графически?), Которые были очень важны. Причина, по которой номера записей «идут противоположным образом», состоит в том, что записи были вставлены с датами, отсортированными по убыванию. и номер записи является полем автоматического номера (PK, если хотите), оцененным в момент ввода. Таким образом, номера PK увеличиваются, а значения даты снижаются. – Paul