如何在oracle中使用超前滞后功能

时间:2017-12-19 18:26:44

标签: sql oracle

我已经写了一些查询来得到我的结果如下: 注意:从2016年1月到2018年,我有几个月的时间。       有两种类型,' hist'或者未来' 结果数据集:     在这个例子中:让我们考虑将id1 + id2 + id3组合为1,2,3

type    month     id1  id2  id3    value
hist    jan-17     1    2   3       10
hist    feb-17     1    2   3       20
future  jan-17     1    2   3       15
future  feb-17     1    2   3       1
hist    mar-17     1    2   3       2
future  apr-17     1    2   3       5

我的计算逻辑取决于每月的季度数。 例如。对于1月份(季度的第一个月),我希望价值为:1月的未来+非洲的未来价值+ 3月的未来价值。 所以对于jan-17,输出应该是:15 + 1 + 0(对于3月没有相应的未来值)

对于feb月份(季度的第2个月),值应为:jan的hist + feb的未来+ 3月的未来,即10 + 1 + 0(3月的未来不可用)

同样对于游行月份,价值应该是:1月的历史+ 2月的历史+ 3月的未来,即10 + 20 + 0(游行的无广播)。

同样适用于4月,may.june(取决于每月的季度数)

我知道超前滞后功能,但我无法在此处应用它 有人可以帮忙吗

2 个答案:

答案 0 :(得分:0)

如果你将日期转换为季度,我可以不用延迟,这可以通过一组来完成:

WITH
    dset
    AS
        (SELECT DATE '2017-01-17' month, 5 VALUE
           FROM DUAL
         UNION ALL
         SELECT DATE '2017-02-17' month, 6 VALUE
           FROM DUAL
         UNION ALL
         SELECT DATE '2017-03-25' month, 7 VALUE
           FROM DUAL
         UNION ALL
         SELECT DATE '2017-05-25' month, 4 VALUE
           FROM DUAL)
  SELECT SUM (VALUE) value_sum, TO_CHAR (month, 'q') quarter, TO_CHAR (month, 'YYYY') year
    FROM dset
GROUP BY TO_CHAR (month, 'q'), TO_CHAR (month, 'YYYY');

这导致:

VALUE_SUM QUARTER YEAR
18        1       2017
 4        2       2017

如果您需要每条记录的结果,我们可以使用分析函数:

SELECT SUM (VALUE) OVER (PARTITION BY TO_CHAR (month, 'q'), TO_CHAR (month, 'YYYY')) quarter_sum, month, VALUE
  FROM dset

这导致:

QUARTER_SUM MONTH     VALUE
18          1/17/2017   5
18          2/17/2017   6
18          3/25/2017   7
 4          5/25/2017   4

确保包含年份,您不希望将不同年份的季度合并。

答案 1 :(得分:0)

好吧,正如其中一条评论中所说的那样..诀窍在于你的另一个问题&相应的答案。嗯......有点像这样..

git reset --hard