Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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查询应不使用初始值进行计数,只对有效的更改进行计数_Sql_Oracle - Fatal编程技术网

SQL查询应不使用初始值进行计数,只对有效的更改进行计数

SQL查询应不使用初始值进行计数,只对有效的更改进行计数,sql,oracle,Sql,Oracle,根据表格: CREATE TABLE blah (CAT, BUSINESS_NR, TIME_A, VERSION, SOME_CODE) AS SELECT 'ABC', 123, TIMESTAMP '2009-02-19 00:00:00 UTC', 1, 'OPP' FROM DUAL UNION ALL SELECT 'ABC', 456, TIMESTAMP '2009-03-18 00:00:00 UTC', 1, 'ZUM' FROM DUA

根据表格:

CREATE TABLE blah (CAT, BUSINESS_NR, TIME_A, VERSION, SOME_CODE) AS
SELECT 'ABC',   123,    TIMESTAMP '2009-02-19 00:00:00 UTC',    1,  'OPP' FROM DUAL UNION ALL
SELECT 'ABC',   456,    TIMESTAMP '2009-03-18 00:00:00 UTC',    1,  'ZUM' FROM DUAL UNION ALL
SELECT 'ABC',   444,    TIMESTAMP '2009-03-18 00:00:00 UTC',    1,  'ZUM' FROM DUAL UNION ALL
SELECT 'ABC',   444,    TIMESTAMP '2009-03-18 00:00:00 UTC',    2,  'MUZ' FROM DUAL UNION ALL
SELECT 'ABC',   456,    TIMESTAMP '2009-04-18 00:00:00 UTC',    2,  'XXX' FROM DUAL UNION ALL
SELECT 'ABC',   456,    TIMESTAMP '2009-04-18 00:00:00 UTC',    3,  'XXX' FROM DUAL UNION ALL
SELECT 'ABC',   456,    TIMESTAMP '2009-04-18 00:00:00 UTC',    4,  'UIO' FROM DUAL UNION ALL
SELECT 'ABC',   456,    TIMESTAMP '2009-05-18 00:00:00 UTC',    5,  'RQA' FROM DUAL UNION ALL
SELECT 'DEF',   637,    TIMESTAMP '2018-02-16 00:00:00 UTC',    1,  'FAW' FROM DUAL UNION ALL
SELECT 'DEF',   789,    TIMESTAMP '2018-02-17 00:00:00 UTC',    1,  'WER' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-16 00:00:00 UTC',    1,  'AAA' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-17 00:00:00 UTC',    2,  'BBB' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-18 00:00:00 UTC',    3,  'AAA' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-19 00:00:00 UTC',    4,  'CCC' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-20 00:00:00 UTC',    5,  'AAA' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-21 00:00:00 UTC',    6,  'DDD' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-22 00:00:00 UTC',    7,  'DDD' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-23 00:00:00 UTC',    8,  'DDD' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-24 00:00:00 UTC',    9,  'EEE' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-25 00:00:00 UTC',    10, 'EEE' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-26 00:00:00 UTC',    11, 'DDD' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-27 00:00:00 UTC',    12, 'BBB' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-26 00:00:00 UTC',    13, 'EEE' FROM DUAL UNION ALL
SELECT 'SPZ',   123,    TIMESTAMP '2018-02-27 00:00:00 UTC',    14, 'EEE' FROM DUAL UNION ALL
SELECT 'FLA',   123,    TIMESTAMP '2018-02-16 00:00:00 UTC',    1, 'ABC' FROM DUAL UNION ALL
SELECT 'FLA',   123,    TIMESTAMP '2018-03-17 00:00:00 UTC',    2, 'ABC' FROM DUAL UNION ALL
SELECT 'FLA',   123,    TIMESTAMP '2018-04-18 00:00:00 UTC',    3, 'ABC' FROM DUAL UNION ALL
SELECT 'FLA',   123,    TIMESTAMP '2018-05-18 00:00:00 UTC',    4, 'AAA' FROM DUAL UNION ALL
SELECT 'GHI',   248,    TIMESTAMP '2018-02-17 00:00:00 UTC',    1,  'QWE' FROM DUAL UNION ALL
SELECT 'GHI',   248,    TIMESTAMP '2019-02-17 00:00:00 UTC',    2,  'PPP' FROM DUAL UNION ALL
SELECT 'GHI',   357,    TIMESTAMP '2020-02-16 00:00:00 UTC',    1,  'FFF' FROM DUAL UNION ALL
SELECT 'GHI',   420,    TIMESTAMP '2020-02-16 00:00:00 UTC',    1,  'QDS' FROM DUAL UNION ALL
SELECT 'GHI',   357,    TIMESTAMP '2020-02-16 00:00:00 UTC',    2,  'GGG' FROM DUAL UNION ALL
SELECT 'GHI',   357,    TIMESTAMP '2020-02-16 00:00:00 UTC',    3,  'LLL' FROM DUAL UNION ALL
SELECT 'GHI',   357,    TIMESTAMP '2020-02-16 00:00:00 UTC',    4,  'LLL' FROM DUAL UNION ALL
SELECT 'GHI',   357,    TIMESTAMP '2020-08-16 00:00:00 UTC',    4,  'FFF' FROM DUAL UNION ALL
SELECT 'GHI',   357,    TIMESTAMP '2020-10-16 00:00:00 UTC',    5,  'ZZZ' FROM DUAL
我需要一个查询,通过CAT和MONTH向我提供一个粗略的概述,在以下情况下,某个业务的某些代码发生了多少更改:

对于某些代码,第一个版本1和所有相同的版本都不能计算在内 所有相等且相互跟随的_代码值应计为一 根据stackoverflow中SQL专家的所有超酷输入提示,我现在提出了以下方法:

    SELECT cat, moenat, SUM (version_change) AS total_version_changes
    FROM (SELECT cat,
                 TRUNC (TIME_A, 'MON') AS moenat,
                 CASE
                     WHEN    some_code <>
                             LAG (some_code) OVER (PARTITION BY cat ORDER BY version, time_a)
                          OR LAG (some_code) OVER (PARTITION BY cat ORDER BY version, time_a) IS NULL --Needed for version 1
                     THEN
                         1
                     ELSE
                         0
                 END                      AS version_change
            FROM blah where version >1)
GROUP BY cat, moenat
ORDER BY cat, moenat;
这实际上不是我想要的,因为版本1-3是初始值。2018年5月版本4中只有1处变更

FLA',   123,    TIMESTAMP '2018-02-16 00:00:00 UTC',    1, 'ABC' 
FLA',   123,    TIMESTAMP '2018-03-17 00:00:00 UTC',    2, 'ABC' 
FLA',   123,    TIMESTAMP '2018-04-18 00:00:00 UTC',    3, 'ABC' 
FLA',   123,    TIMESTAMP '2018-05-18 00:00:00 UTC',    4, 'AAA' 
因此,此处的预期输出应为:

FLA 01.05.2018  1
有人能帮我解决这个问题吗

第二实验台:

CREATE TABLE blah (CAT, BUSINESS_NR, TIME_A, VERSION, SOME_CODE) AS
SELECT 'FLA',   123,    TIMESTAMP '2018-02-16 00:00:00 UTC',    1, 'ABC' FROM DUAL UNION ALL --0, because initial
SELECT 'FLA',   123,    TIMESTAMP '2018-03-17 00:00:00 UTC',    2, 'ABC' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   123,    TIMESTAMP '2018-04-18 00:00:00 UTC',    3, 'ABC' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   123,    TIMESTAMP '2018-05-18 00:00:00 UTC',    4, 'AAA' FROM DUAL UNION ALL --1, valid change, count for MAY 2018

SELECT 'FLA',   555,    TIMESTAMP '2018-05-18 00:00:00 UTC',    1, 'AAA' FROM DUAL UNION ALL --0, because initial 
SELECT 'FLA',   777,    TIMESTAMP '2018-05-18 00:00:00 UTC',    1, 'ZZZ' FROM DUAL UNION ALL --0, because initial
SELECT 'FLA',   777,    TIMESTAMP '2018-05-18 00:00:00 UTC',    2, 'ZZZ' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   777,    TIMESTAMP '2018-05-18 00:00:00 UTC',    3, 'ZZZ' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   777,    TIMESTAMP '2018-06-18 00:00:00 UTC',    4, 'ZZZ' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   777,    TIMESTAMP '2018-07-18 00:00:00 UTC',    5, 'ZZZ' FROM DUAL UNION ALL --0, because still like initial

SELECT 'FLA',   888,    TIMESTAMP '2018-05-18 00:00:00 UTC',    1, 'ZZZ' FROM DUAL UNION ALL --0, because initial
SELECT 'FLA',   888,    TIMESTAMP '2018-05-18 00:00:00 UTC',    2, 'ZZZ' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   888,    TIMESTAMP '2018-05-18 00:00:00 UTC',    3, 'ABC' FROM DUAL UNION ALL --1, valid change, count for MAY 2018
SELECT 'FLA',   888,    TIMESTAMP '2018-05-18 00:00:00 UTC',    4, 'DEF' FROM DUAL UNION ALL --1, valid change, count for MAY 2018
SELECT 'FLA',   888,    TIMESTAMP '2018-06-18 00:00:00 UTC',    5, 'GHI' FROM DUAL UNION ALL --1, valid change, count in JUNE 2018

SELECT 'FLA',   999,    TIMESTAMP '2018-05-18 00:00:00 UTC',    1, 'GHI' FROM DUAL UNION ALL --0, because initial 
SELECT 'FLA',   999,    TIMESTAMP '2018-06-18 00:00:00 UTC',    2, 'GHI' FROM DUAL UNION ALL --0, because still like initial
SELECT 'FLA',   999,    TIMESTAMP '2018-09-18 00:00:00 UTC',    3, 'ZIP' FROM DUAL DUAL; --1, valid change, count for SEP 2018
输出应为:

FLA MAY 2018: 3
FLA JUN 2018: 1
FLA SEP 2018: 3
OR条件中的第二个子句是导致计算第一个更改的原因。另外,将business_nr添加到partition子句中,可以更正针对第二个表进行测试时的计数

选择cat、moenat、SUM版本变更作为总版本变更 从选择猫, 真是时间啊,我是莫纳特, 案例 当某些代码 延迟某个代码 按类别、业务顺序、版本、时间划分 然后 1. 其他的 0 随着版本的更改而结束 胡说八道 按猫分组,moenat -可以对下面的子句进行注释/取消注释,以隐藏未发生更改的行 -总和版本更改>0 猫叫,莫纳特;
解决了我的问题,谢谢
FLA MAY 2018: 3
FLA JUN 2018: 1
FLA SEP 2018: 3