Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sql在列级别获取最近2个月的员工计数?_Sql_Oracle - Fatal编程技术网

使用sql在列级别获取最近2个月的员工计数?

使用sql在列级别获取最近2个月的员工计数?,sql,oracle,Sql,Oracle,我正在尝试获取列级别的最近2个月员工计数 Below is my data: yearmm, emp_cnt 201908,100 201907,200 201906,300 201904,600 预期输出:在上例中,由于没有201905的数据,第三行的yearmonth-2为0 Yearmonth, emp_cnt, Yearmonth-1_Cnt,Yearmonth-2_Cnt 201908,100,200,300 201907,200,300,600 201906,300,600,0 2

我正在尝试获取列级别的最近2个月员工计数

Below is my data:
yearmm, emp_cnt
201908,100
201907,200
201906,300
201904,600
预期输出:在上例中,由于没有201905的数据,第三行的yearmonth-2为0

Yearmonth, emp_cnt, Yearmonth-1_Cnt,Yearmonth-2_Cnt
201908,100,200,300
201907,200,300,600
201906,300,600,0
201904,600,0,0
我的努力:我使用lag根据first col的订单获取最后两个月的数据,但如果一个月内有任何数据丢失,则需要上一个月的数据。有人能帮我克服这个挑战吗

with test_exp(yyyymonth,cnt) as(
    select 201908,100 union
        select 201907,200 union
        select 201906,300 union
        select 201904,600 )
    select yyyymonth,cnt,LAG(cnt, 1) OVER(
            ORDER BY
                yyyymonth
        ) AS "M-yyyymonth-1_Cnt"
        ,LAG(cnt, 2) OVER(
            ORDER BY
                yyyymonth
        ) AS "M-yyyymonth-2_Cnt" from test_exp

这里有一种方法可以使用
lag()


注:假设所有日期都在一年内。您尚未明确指定数据库(也不是
yearmonth
的类型,所以我只是用减法来表示检查值是否是一个月前的值。

我删除了不兼容的数据库标记。请仅使用您真正使用的数据库进行标记。您可以使用windowing子句,如.its在Oracle中。那么对于201901,它会得到去年12月和11月的计数吗?@PAS…No、 答案很清楚,它不会跨越年份界限。
select t.*,
       (case when lag(yearmonth) over (order by yearmonth) = yearmonth - 1
             then lag(empcnt) over (order by yearmonth)
             else 0
        end) as yearmonth_1,
       (case when lag(yearmonth, 2) over (order by yearmonth) = yearmonth - 1
             then lag(empcnt, 2) over (order by yearmonth)
             else 0
        end) as yearmonth_2
from t;