我試圖回傳某一事件的序列中的最后一個值,我最初的想法是使用LAST_VALUE(),但我不能讓它發揮作用。我可以通過子查詢和連接來實作這一目標,但是是否有一個視窗函式可以更容易地獲得這一結果?
現在,查詢正在提取最大金額,但我想要的是基于seq列的最后金額
。資料
| PaymentID | Description | Result | Seq |
|-----------|----------------------|--------|-----|
| 1 | 進入支付頁面 | 是 | 1 | 是
| 1 | 輸入的金額| 50 | 2 |
| 1 | 輸入的金額 | 60 | 3 |
| 1 | 輸入的金額| 20 | 4 |
| 1 | 確認的金額 | 操作員">| 是 | 5 | 是
| 2 | 進入支付頁面 | 是 | 1 | 是
| 2 | 輸入的金額| 100 | 2 |
| 2 | 確認的金額 | 是 | 3 | 是
| 3 | 進入支付頁面 | 是 | 1 | 是
| 3 | 輸入的金額| 4 | 2 |
| 3 | 確認的金額 | No | 3 |
| 3 | 輸入的金額| 8 | 4 |
| 3 | 確認金額 |是 | 5 |
當前查詢結果
| PaymentID | InPayment | Amount | Confirmed |
|-----------|-----------|--------|-----------|
| 1 | Yes | 60 | Yes |
| 2 | Yes | 100 | Yes |
| 3 | yes | 8 | Yes |
期望的結果
| PaymentID | InPayment | Amount | Confirmed |
|-----------|-----------|--------|-----------|
| 1 | Yes | 20 | Yes |
| 2 | Yes | 100 | Yes |
| 3 | yes | 8 | Yes |
uj5u.com熱心網友回復:
你可以使用row_number()和條件聚合:
select paymentid,
max(case when description = 'Entered Payment Page' then result end) as inpayment,
max(case when description = 'Amount Entered' then result end) as amount_entered,
max(case when 描述 = 'Amount Confirmed' then result end) as amount_confirmed
from (select t.*,
row_number() over (partition by paymentid, description order by seq desc) as seqnum
from paymentinfo t
) t
where seqnum = 1
group by paymentid。
這里是一個SQL Fiddle。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/311069.html
標籤:
