添加间隔作为 SQL 语句的一部分
Adding intervals as part of an SQL statement
希望不大,因为我不确定这是否可能 - 如果是的话,我绝对欠你们的。
我有一个 table start_date、end_date 和时间。假设我有一行 start_date 2015 年 1 月 1 日,end_date 2015 年 12 月 31 日,小时数为 120。
我想生成 12 行的结果,每行 10 小时,月份
类似
|Jan 15|10|
|Feb 15|10|
...
|Dec 15|10|
我想要十个小时,因为我用 120 小时除以月数 (12)。 120 / 12 = 10
我完全可以这样做吗?或者类似的东西?我怀疑我可能必须在代码中而不是在 SQL 中执行 ETL。有没有人对我如何能更接近我想要的东西有任何想法?
谢谢
您只需要一个数字 table。如果你有,你可以这样做:
select add_months(start_date, n.n - 1),
val / (months_between(start_date, end_date) + 1)
from t join
numbers n
on add_months(start_date, n.n - 1) <= end_date;
您可以通过多种方式创建 numbers
table。一个简单的方法是这样的:
with numbers as (
select rownum as n
from t
where rownum <= 100
)
希望不大,因为我不确定这是否可能 - 如果是的话,我绝对欠你们的。
我有一个 table start_date、end_date 和时间。假设我有一行 start_date 2015 年 1 月 1 日,end_date 2015 年 12 月 31 日,小时数为 120。 我想生成 12 行的结果,每行 10 小时,月份
类似
|Jan 15|10|
|Feb 15|10|
...
|Dec 15|10|
我想要十个小时,因为我用 120 小时除以月数 (12)。 120 / 12 = 10
我完全可以这样做吗?或者类似的东西?我怀疑我可能必须在代码中而不是在 SQL 中执行 ETL。有没有人对我如何能更接近我想要的东西有任何想法?
谢谢
您只需要一个数字 table。如果你有,你可以这样做:
select add_months(start_date, n.n - 1),
val / (months_between(start_date, end_date) + 1)
from t join
numbers n
on add_months(start_date, n.n - 1) <= end_date;
您可以通过多种方式创建 numbers
table。一个简单的方法是这样的:
with numbers as (
select rownum as n
from t
where rownum <= 100
)