我有一份報告看起來像這樣:
| 訂單號 | 時間戳 | ID | 地位 |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | 完畢 |
| 12 | 2021-06-30-18.00.00.224525 | 22 | 完畢 |
| 12 | 2021-07-01-01.00.00.224525 | 23 | 完畢 |
| 12 | 2021-08-01-01.00.00.224525 | 25 | 取消 |
這是通過 SQL 完成的:
SELECT numberOrder, timestamp, id, status
from order
where status <> 'cancel'
order by id
fetch first row only
結果回傳這個:
| 訂單號 | 時間戳 | ID | 地位 |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | 完畢 |
如果我沒有 2 個或更多訂單,如何僅在同一個查詢中產生取消訂單。如果我只有一個訂單且狀態為取消(未完成訂單)。結果只顯示取消的訂單。但是如果我有超過 2 個訂單(orders1 : done, orders2 : done and orders3 = cancel)結果應該只有 orders1 : done。
那個報告 :
| 訂單號 | 時間戳 | ID | 地位 |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | 取消 |
SELECT numberOrder, timestamp, id, status
from order
where (status <> 'cancel' or status = 'cancel') -- always true the condition
order by id
fetch first row only
結果 :
| 訂單號 | 時間戳 | ID | 地位 |
|---|---|---|---|
| 12 | 2021-06-23-14.00.00.232425 | 11 | 取消 |
uj5u.com熱心網友回復:
如果您只選擇一行,則按狀態排序有效,
SELECT numberOrder, timestamp, id, status
from order
order by id, status DESC
fetch first row only
如果你想選擇任意數量的行,只有在沒有“完成”時才取消,
SELECT numberOrder, timestamp, id, status
from order
WHERE (status = 'done'
or (SELECT status FROM order ORDER BY status DESC LIMIT 1) != 'done')
order by id
不確定最后一個解決方案是否最佳,但它有效。
uj5u.com熱心網友回復:
試試這個:
WITH T (numberOrder, id, status) AS
(
VALUES
(12, 11, 'done')
, (12, 22, 'done')
, (12, 23, 'done')
, (12, 25, 'cancel')
, (13, 10, 'cancel')
, (13, 11, 'cancel')
)
SELECT numberOrder, id, status
FROM
(
SELECT T.*, ROW_NUMBER () OVER (PARTITION BY numberOrder ORDER BY DECODE (status, 'cancel', 1, 0), id) AS RN_
FROM T
)
WHERE RN_ = 1
結果是:
| 號碼順序 | ID | 地位 |
|---|---|---|
| 12 | 11 | 完畢 |
| 13 | 10 | 取消 |
如果結果出乎意料,請在上面的示例資料中提供正確的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/383200.html
上一篇:按字串ID洗掉MongoDB檔案
