@dside_ru ты ведь мне чего-то писал на тему вопроса выше?
Ну, первое что пришло в голову это ленивая последовательность из каждого правила, которые хранятся в sorted-set'е по дате события первого ("открытого") элемента – и на его базе делается одна большая ленивая последовательность, которая каждый шаг достаёт элемент с минимальной датой и соответствующую последовательность проматывает на элемент вперёд, ставя её на соответствующее новое место в sorted-set'е.
Так, идя по полученной последовательности вперёд, будешь получать события по всем правилам в хронологическом порядке.
Будет ли это масштабироваться хорошо под конкретную задачу – вопрос открытый. Зависит от числа правил, его роста, разнообразия дат и их удалённости.
По идее, состояние последовательности на заданный день легко кэшировать, чтобы не "мотать" каждый раз с начала, особенно если правила заданы рекуррентно (т. е. у ленивой послед-ти нет состояния кроме первого элемента – хотя всё равно нужно знать разновидность правила, что тоже состояние...).