Мне нужно сосчитать количество предыдущих бронирований, сделанных клиентом, до текущего. Сведения о желаемом выводе приведены ниже.
HotelID RoomID BookingID PrevBookingCount
H6 R8 G3 B1 0
H6 R2 G5 B2 0
H6 R7 G1 B3 0
H10 R4 G7 B4 0
H10 R9 G2 B5 0
H13 R1 G11 B6 0
H13 R8 G1 B7 1
H13 R5 G5 B8 1
H13 R3 G1 B9 2
В третьем столбце указан идентификатор гостя. Это поле, которое должно учитываться при определении предыдущих бронирований. Например, см. Бронирование B3 (строка 3) с идентификатором гостя G1. У этого клиента первое бронирование B1. Предыдущие заказы должны быть нулевыми. Бронирование B7 снова осуществляется гостем G1, но теперь у этого клиента есть одно предыдущее бронирование. Аналогично для бронирования B9.
Таблица была создана с PrevBookingCount, для которого установлено значение NULL, и для предоставления результатов необходимо использовать оператор обновления или изменения таблицы.
create table bookings
(HotelID varchar(4),
RoomID varchar(4),
BookingID varchar(4),
PrevBookingCount int)
insert into bookings
values('H6','R8','G3','B1',NULL)
values('H6','R2','G5','B2',NULL)
...
values('H13','R3','G1','B9',NULL)
Мои подписчики (плохо ) попытка дает одно и то же значение (6) для каждой записи.
update bookings
set PrevBookingCount = count(distinct GuestID)
Существует ли какой-то итерационный подход или подзапрос, который может дать результаты?