@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日 预先感谢
答案 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
。