ID START_DATE STATUS
10 2013-05-29 FREE
10 2013-05-29 PAID
10 2014-05-30 PAID
10 2014-11-29 FREE
10 2014-12-02 PAID
10 2015-09-29 PAID
10 2015-12-02 PAID
10 2016-04-04 PAID
10 2016-04-05 FREE
數據我的輸出應該只包含行,其中狀態=「FREE」。每次狀態都是免費時,我需要獲取狀態=「已付費」的前一個最短日期。
ID STATUS PREVIOUS_MIN_PAID_START_DATE
10 FREE NULL
10 FREE 2013-05-29
10 FREE 2014-12-02
的LAG()
功能只給出了第一個前值,我怎麼能得到以前的最低(第n個)的價值?
SELECT
ID,
STATUS,
LAG(CASE WHEN STATUS = 'PAID' THEN START_DATE, 1)
OVER (PARTITION BY ID ORDER BY START_DATE) AS previous_paid_start_date
FROM
TEMP
WHERE
STATUS = 'FREE'
希望的輸出是不明確的。爲什麼只有三排?並且start_date列不存在,所以不清楚哪些輸出行對應於哪些輸入行。 – leftjoin
我已更新所需的輸出消息。我想從之前的連續「付費」狀態中獲取以前的最小開始日期。希望有人能幫助我。 – pshan99
兩條第一條記錄的日期相同。順序依賴於STATUS以及START_DATE嗎?還是它是示例數據中的錯誤? – leftjoin