У вас есть 2 проблемы: во-первых, как создать таблицу диапазонов дат, чтобы объединить ее с датами начала и окончания. Хитрость с Redshift заключается в том, чтобы не полагаться на создание последовательности. Вы можете легко создать последовательность с небольшим перекрестным соединением.
create table ten (X) as select values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
create table (X) thousand as
select C.X * 100 + B.X * 10 + A.X from ten A
cross join ten B
cross join ten C;
Вы можете расширить это до любого порядка величины и преобразовать в дни. (из памяти, поэтому я приношу свои извинения, если я сделал какие-либо опечатки)
GMB дает хороший пример того, как создавать копии всех строк для всех дат между датой начала и конца. Это может быть хорошим способом для go для небольшого числа строк в вашей таблице учетных записей, но я думаю, что вы конкретно говорите о Redshift, есть хороший шанс, что эта таблица довольно большая. Репликация большой таблицы по количеству дней между начальной и конечной датой приведет к очень большому продукту данных, который будет создаваться медленно и займет много разливов на диск. Это проблема № 2 (опять же, если у вас много аккаунтов).
Если это так, то могу я предложить другой подход. Объединение таблицы ваших счетов с таблицей чисел, преобразованной в даты, даст вам точную дату и дату начала и окончания каждой учетной записи. С некоторыми окнами вы можете найти большинство сводок, которые вы, вероятно, ищете, и вам не нужно будет делать массивные изображения данных для этого. Чтобы было ясно, это окупается больше, чем больше стол, но для маленьких столов метод соединения будет лучшим. (2N метод против N раз Даты)