【发布时间】:2016-04-28 17:05:18
【问题描述】:
我有一张像这样的表 A
Date Name Value
----------------------------
2015-01-01 A 12
2015-01-01 B 13
2015-01-01 C 10
2015-01-01 D 9
2015-01-01 E 15
2015-01-01 F 11
2015-01-02 A 1
2015-01-02 B 2
2015-01-02 C 3
2015-01-02 D 4
2015-01-02 E 5
2015-01-02 F 6
2015-01-03 A 7
2015-01-03 B 8
2015-01-03 C 9
2015-01-03 D 10
2015-01-03 E 15
2015-01-03 F 16
....
其中包含每天每个名称的值。我需要第二张桌子,看起来像这样
Date Name ValueDate ValueDate+1 ValueDate+2
--------------------------------------------------------------
2015-01-01 A 12 1 7
2015-01-01 B 13 2 8
2015-01-01 C 10 3 9
2015-01-01 D 9 4 10
2015-01-01 E 15 5 15
2015-01-01 F 11 6 16
2015-01-02 A 1 7 ...
2015-01-02 B 2 8 ...
2015-01-02 C 3 9 ...
2015-01-02 D 4 10 ...
2015-01-02 E 5 15 ...
2015-01-02 F 6 16 ...
我尝试创建一个正确输入所有日期的中间表
Date Name ValueDate ValueDate+1 ValueDate+2
----------------------------------------------------------------
2015-01-01 A 2015-01-01 2015-01-02 2015-01-03
2015-01-01 B 2015-01-01 2015-01-02 2015-01-03
2015-01-01 C 2015-01-01 2015-01-02 2015-01-03
2015-01-01 D 2015-01-01 2015-01-02 2015-01-03
2015-01-01 E 2015-01-01 2015-01-02 2015-01-03
2015-01-01 F 2015-01-01 2015-01-02 2015-01-03
...
然后我的想法是在表 a 上使用某种 JOIN 将对应的值映射到日期并使用 s.th like
CASE WHEN Date = ValueDate THEN Value ELSE NULL END AS ValueDate+1
我正在努力弄清楚如何在 SQL 中完成此操作。对于初始日期序列,我基本上需要窗口上的所有值。为了提供一些背景信息,我想在固定的时间间隔内查看该值在接下来的 x 天内的表现。数据类型是所有日期列的日期,名称的 Varchar 和值的数字。 ValueDate+1 和 +2 表示 +1/2 天。也不能排除名字的数量会随着时间的推移保持不变。
谢谢
【问题讨论】:
-
对我来说这是两个左连接和一个枢轴。假设您的 version of netezza 支持
pivoting... 您可能必须使用动态 sql 将日期名称生成为列标题,尤其是在列数可变的情况下。