上次更改日期

时间:2018-06-20 18:21:12

标签: sql

@Rollback

我的输出应为

ID  DATE        AMT
A   20180401    110
A   20180301    110
A   20180201    100
A   20171010    90
B   20181001    90
B   20180901    90
B   20180707    80

所以我需要获取具有相同ID的当前值不同于当前值的结果列日期

因此,如果在这种情况下我们取第一条记录,则当前AMT值为110,下一条记录也为110,下一条记录为100,这与当前值不同,所以我需要获取该日期-

我用过 LAST_VALUE(DATE)超过(PARTITION BY ID,AMT ORDER BY ID)AS LASTVALUE-我正在获取具有相同金额的记录的日期

这是在 LAST_VALUE(DATE)超过(按ID划分,按ID划分AMT订单)作为LASTVALUE2

ID  DATE       AMT  Result
A   20180401    110 20180201 
A   20180301    110 20180201
A   20180201    100 20171010
A   20171010    90  null
B   20181001    90  20180707
B   20180901    90  20180707
B   20180707    80  null

第三条记录应为2017年11月1日 预先感谢

2 个答案:

答案 0 :(得分:0)

这很棘手。我认为这可以满足您的要求:

select t.*, 
       max(case when result <> next_result then date end) over (partition by id order by date rows between unbounded preceding and 1 preceding)
from (select t.*,
             lead(result) over (partition by a order by b) as next_result
      from t
     ) t;

答案 1 :(得分:0)

尝试:

SELECT s1.ID
    , FORMAT(s1.theDate,'MM-dd-yyyy') AS theDate
    , s1.Amt
    --, s1.PrevAmt
    , CASE 
        WHEN Amt <> prevAmt 
        THEN FORMAT(
          LAG(theDate) OVER ( PARTITION BY ID ORDER BY theDate )
          ,'MM-dd-yyyy' ) 
        END AS prevDate
FROM (
  SELECT ID, theDate, Amt
    , LAG(AMT) OVER ( PARTITION BY ID ORDER BY theDate) AS prevAmt 
  FROM t1 
) s1
ORDER BY ID, theDate DESC

这应该给出:

ID | theDate    | Amt | prevDate  
:- | :--------- | --: | :---------
A  | 10-10-2017 |  90 | null      
A  | 04-04-2018 | 110 | null      
A  | 03-03-2018 | 110 | 02-02-2018
A  | 02-02-2018 | 100 | 10-10-2017
B  | 10-10-2018 |  90 | null      
B  | 09-09-2018 |  90 | 07-07-2018
B  | 07-07-2018 |  80 | null      

db <>提琴here

对于没有上一行要从中提取date的行,它将在NULL字段中返回prevDate