У меня есть таблица, похожая на показанную. Он содержит список идентификаторов пользователей, значение часа для каждого часа дня и флаг доступности, чтобы определить, доступен ли этот пользователь в этот час.
Мне нужно перечислить все идентификаторы пользователей, которые доступны в течение нескольких последовательных часов, определенных как @n
#####################
# UID # Avail # Hour#
#####################
# 123 # 1 # 0 #
# 123 # 1 # 1 #
# 123 # 0 # 2 #
# 123 # 0 # 3 #
# 123 # 0 # 4 #
# 123 # 1 # 5 #
# 123 # 1 # 6 #
# 123 # 1 # 7 #
# 123 # 1 # 8 #
# 341 # 1 # 0 #
# 341 # 1 # 1 #
# 341 # 0 # 2 #
# 341 # 1 # 3 #
# 341 # 1 # 4 #
# 341 # 0 # 5 #
# 341 # 1 # 6 #
# 341 # 1 # 7 #
# 341 # 0 # 8 #
######################
Это должно привести к следующему результату для @n=3
#######
# UID #
#######
# 123 #
#######
Я попытался использовать ROW_NUMBER() (раздел по UID, доступный ORDER BY UID, час), чтобы присвоить номер каждой строке, разделенной по UID, и независимо от того, помечены ли они как доступные. Однако это не работает, поскольку периоды доступности могут меняться несколько раз в день, а функция ROW_NUMBER() вела только два подсчета для каждого пользователя на основе флага доступности.