【问题标题】:I want to see only records which have only the column "C_STATUS" changed我只想查看仅更改了“C_STATUS”列的记录
【发布时间】:2020-09-08 08:02:33
【问题描述】:

我有这种情况:

表格有更多列。每次记录的一个字段发生变化时,“BEGIN_DATE”和“END_DATE”列都会发生变化。

N_POlICY        BEGIN_DATE              END_DATE                C_STATUS
50.007.267.xxx  29-feb-2012 0.00.00.0   20-nov-2015 0.00.00.0   0
50.007.267.xxx  20-nov-2015 0.00.00.0   24-dic-2015 0.00.00.0   0
50.007.267.xxx  24-dic-2015 0.00.00.0   29-mar-2017 0.00.00.0   0
50.007.267.xxx  29-mar-2017 0.00.00.0   4-lug-2017 0.00.00.0    7
50.007.267.xxx  4-lug-2017 0.00.00.0    29-ago-2017 0.00.00.0   0
50.007.267.xxx  29-ago-2017 0.00.00.0   10-ott-2017 0.00.00.0   7
50.007.267.xxx  10-ott-2017 0.00.00.0   29-mag-2018 0.00.00.0   0
50.007.267.xxx  29-mag-2018 0.00.00.0   10-lug-2018 0.00.00.0   7
50.007.267.xxx  10-lug-2018 0.00.00.0   31-dic-2050 0.00.00.0   0

我正在尝试开发一个仅显示具有不同状态的记录的选择,因此仅在状态更改时才显示。结果应该是这样的:

N_POlICY        BEGIN_DATE              END_DATE                C_STATUS
50.007.267.xxx  24-dic-2015 0.00.00.0   29-mar-2017 0.00.00.0   0
50.007.267.xxx  29-mar-2017 0.00.00.0   4-lug-2017 0.00.00.0    7
50.007.267.xxx  4-lug-2017 0.00.00.0    29-ago-2017 0.00.00.0   0
50.007.267.xxx  29-ago-2017 0.00.00.0   10-ott-2017 0.00.00.0   7
50.007.267.xxx  10-ott-2017 0.00.00.0   29-mag-2018 0.00.00.0   0
50.007.267.xxx  29-mag-2018 0.00.00.0   10-lug-2018 0.00.00.0   7
50.007.267.xxx  10-lug-2018 0.00.00.0   31-dic-2050 0.00.00.0   0

感谢@Fahmi,我使用了这个查询,结果是这样的:

SELECT * FROM
(
SELECT  N_POLICY,
        BEGIN_DATE,
        END_DATE,
        C_STATUS,
        LAG(C_STATUS) OVER(PARTITION BY N_POLICY ORDER BY BEGIN_DATE) AS PREV_STATUS
FROM TABLE_NAME
)A WHERE C_STATUS <> PREV_STATUS AND N_POLICY = '50007267xxx'
N_POlICY        BEGIN_DATE              END_DATE                C_STATUS  PREV_ST
50.007.267.536  29-mar-2017 0.00.00.0   4-lug-2017 0.00.00.0    7          0
50.007.267.536  4-lug-2017 0.00.00.0    29-ago-2017 0.00.00.0   0          7
50.007.267.536  29-ago-2017 0.00.00.0   10-ott-2017 0.00.00.0   7          0
50.007.267.536  10-ott-2017 0.00.00.0   29-mag-2018 0.00.00.0   0          7
50.007.267.536  29-mag-2018 0.00.00.0   10-lug-2018 0.00.00.0   7          0
50.007.267.536  10-lug-2018 0.00.00.0   31-dic-2050 0.00.00.0   0          7

【问题讨论】:

    标签: sql hana


    【解决方案1】:

    可以使用lag()窗口函数

    select * from
    (
    select d_inizio,d_fine,c_statto,lag(c_statto) over(order by d_inizio) as prev_status
    from tablename
    )A where c_statto<>prev_status
    

    【讨论】:

    • 感谢@Fahmi 的回答,我刚刚在您查询后更新了问题,您还有其他提示吗?
    • @NovaDragmatika,你有策略列,根据图片,它不在你的表中
    • @NovaDragmatika,您能否在此处制作您的表格结构并提供一些示例数据 - dbfiddle.uk 那么很容易回答您的问题
    • 无论如何,现在的问题是我没有看到第一条记录,因为 where 不包括第一个值
    • @NovaDragmatika 。 . .回答后更改问题(因此答案无效)是不礼貌的。更好的方法是接受答案并提出新问题。一方面,它会阻止其他人回答这个问题,因为你已经证明你会使答案无效。
    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2022-01-19
    • 2016-09-24
    相关资源
    最近更新 更多