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