I have a table(users) with these sample data
x
user location name
111 usa aaa
222 canada bbb
333 usa ccc
444 mexico ddd
555 japan eee
From this table, i want to get the final output like below
date user location name
2020-11-03 111 usa aaa
2020-11-03 222 canada bbb
2020-11-03 333 usa ccc
2020-11-03 444 mexico ddd
2020-11-03 555 japan eee
2020-11-02 111 usa aaa
2020-11-02 222 canada bbb
2020-11-02 333 usa ccc
2020-11-02 444 mexico ddd
2020-11-02 555 japan eee
2020-11-01 111 usa aaa
2020-11-01 222 canada bbb
2020-11-01 333 usa ccc
2020-11-01 444 mexico ddd
2020-11-01 555 japan eee
if you see above output, for each day(last 3 days), i am seeing user,location,name
data.
Can anyone suggest a solution for this
Advertisement
Answer
You seem to want a cross join
:
select v.date, t.*
from t cross join
(values ('2020-11-03'), ('2020-11-02'), ('2020-11-01')) v(date);
You can easily adapt this for the last three days:
select current_date - v.n * interval '1 day', t.*
from t cross join
(values (1), (2), (3)) v(n);