В Sql это тоже просто - просто перекрестное соединение со списком дат, которые вы хотите добавить в каждую строку (реплицировать строки). Вы можете видеть, что в вашем примере 3 строки и 3 даты дают 9 строк. (непроверенный пояснительный код :)
select userid, username, "date" from <table> cross join (select values ('2020-01-01'::date), ('2020-02-01'::date), ('2020-03-01'::date));
Проблема с простым подходом состоит в том, что если вы имеете дело с большими таблицами и длинными списками дат, умножение вас убьет. 10 миллиардов строк на 5000 дат - это 15 триллионов результирующих строк, поэтому это займет много времени, а для их хранения потребуется много места на диске. Для небольших таблиц и коротких списков дат это отлично работает.
Если вы занимаетесь «большой» стороной вещей, вам, вероятно, придется переосмыслить то, что вы пытаетесь сделать. Поскольку вы используете Redshift, возможно, вам придется это сделать.