SQL:创建一个额外的列,将最近 3 天的日期作为值
SQL: Create an extra column with last 3 days date as a value
我有一个 table(用户)有这些示例数据
user location name
111 usa aaa
222 canada bbb
333 usa ccc
444 mexico ddd
555 japan eee
由此table,我想获得如下所示的最终输出
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
如果你看到上面的输出,对于每一天(过去 3 天),我看到 user,location,name
数据。
任何人都可以为此提出解决方案
你似乎想要一个 cross join
:
select v.date, t.*
from t cross join
(values ('2020-11-03'), ('2020-11-02'), ('2020-11-01')) v(date);
过去三天您可以轻松调整:
select current_date - v.n * interval '1 day', t.*
from t cross join
(values (1), (2), (3)) v(n);
我有一个 table(用户)有这些示例数据
user location name
111 usa aaa
222 canada bbb
333 usa ccc
444 mexico ddd
555 japan eee
由此table,我想获得如下所示的最终输出
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
如果你看到上面的输出,对于每一天(过去 3 天),我看到 user,location,name
数据。
任何人都可以为此提出解决方案
你似乎想要一个 cross join
:
select v.date, t.*
from t cross join
(values ('2020-11-03'), ('2020-11-02'), ('2020-11-01')) v(date);
过去三天您可以轻松调整:
select current_date - v.n * interval '1 day', t.*
from t cross join
(values (1), (2), (3)) v(n);