Sql 在红移中将月度数据扩展到每日基准水平的备选方案
我最近解决了一个问题,但我想看看是否有更好的选择 目前,我有一个红移表,其中包含每个产品的每月销售目标。这张桌子看起来像这样Sql 在红移中将月度数据扩展到每日基准水平的备选方案,sql,amazon-redshift,Sql,Amazon Redshift,我最近解决了一个问题,但我想看看是否有更好的选择 目前,我有一个红移表,其中包含每个产品的每月销售目标。这张桌子看起来像这样 Start date Product_id Target 2018-08-01 100001 15000 2018-08-01 100002 12500 2018-08-01 100003 17500 2018-08-01 100004
Start date Product_id Target
2018-08-01 100001 15000
2018-08-01 100002 12500
2018-08-01 100003 17500
2018-08-01 100004 16500
2018-08-01 100005 10000
2018-09-01 100001 15500
2018-09-01 100002 13500
2018-09-01 100003 18500
2018-09-01 100004 14500
2018-09-01 100005 14000
.... ... ...
2018-12-31 100005 10000
我想做的是复制表,以便将粒度从每月更改为每天,并在每个日期复制数据,即
Start date Product_id Target
2018-08-01 100001 15000
2018-08-01 100002 12500
2018-08-01 100003 17500
2018-08-01 100004 16500
2018-08-01 100005 10000
2018-08-02 100001 15000
2018-08-02 100002 12500
2018-08-02 100003 17500
2018-08-02 100004 16500
2018-08-02 100005 10000
.... ... ...
2018-12-31 100005 20000
目前的解决方案是,我使用left连接另一个表,该表包含日期值,如
Date
2018-08-01
2018-08-02
2018-08-03
....
2018-12-31
我用这种方式做左连接。我使用left join属性进行复制
SELECT
date_trunc('month', sales_tar.start_date),
dat.datevalue,
sales_tar.product_id,
sales_tar.target
FROM
sales.sales_target sales_tar
LEFT JOIN
datedata.caleanderdate dat ON sales_tar.start_date::date =
date_trunc('month', dat.datevalue)::date
WHERE
tar.start_date::date BETWEEN '2018-08-01' AND '2018-12-31'
但我认为可能有一种更优化的方法来解决这个问题,我可能没有意识到。
有谁有更好的解决方案,可以将数据从每月复制到全年的每天
非常感谢您的帮助通过删除看似不必要的类型转换,您可以稍微清理一下查询:
SELECT st.start_date, cdd.datevalue,
st.product_id, st.target
FROM sales.sales_target st LEFT JOIN
datedata.caleanderdate cd
ON st.start_date = date_trunc('month', cd.datevalue)
WHERE st.start_date BETWEEN '2018-08-01' AND '2018-12-31';
这假设日期值已经是date
s(这是有意义的)
然而,总体而言,您的方法很有意义
您可以调整日历表,使其具有另一列的月初,例如yyyyym
。然后,您可以将查询表述为:
SELECT st.start_date, cdd.datevalue,
st.product_id, st.target
FROM sales.sales_target st LEFT JOIN
datedata.caleanderdate cd
ON st.start_date = cd.yyyymm
WHERE st.start_date BETWEEN '2018-08-01' AND '2018-12-31';
在某些数据库中,这将提高性能。不过,我不确定这是否会对红移产生很大影响。你的方法很好。这是红移的最佳方法。但是你也应该回过头来考虑一下为什么你需要像这样复制表格。也许没有必要&您可以在其他地方修改连接或其他内容。