我正在嘗試找到一種方法來獲取最后狀態放置在 Mysql 上的每個訂單的最后一行。
資料如下所示:
| 訂單號 | 客戶編號 | 時間戳 | 訂單狀態 |
|---|---|---|---|
| 1234 | 885 | 2022-01-01 08:00:00 | 放置 |
| 1234 | 885 | 2022-01-01 09:00:00 | 放置 |
| 1234 | 885 | 2022-01-01 12:00:00 | 處理 |
| 1235 | 885 | 2022-01-02 09:00:00 | 處理 |
| 1235 | 885 | 2022-01-01 14:00:00 | 放置 |
| 1236 | 886 | 2022-01-02 08:00:00 | 放置 |
| 1236 | 886 | 2022-01-02 08:00:00 | 處理 |
這是我的查詢:
SELECT *
FROM orders
WHERE timestamps = (SELECT MAX(timestamps
FROM orders
GROUP BY orderid) and order_status = 'Placed'
但是由于對于相同的時間戳,它可以像訂單 id 1236 一樣放置和處理,我想完全排除這一行,因為我只想要剛剛放置的那一行不被處理。我試圖添加行號,但它并沒有真正幫助我。有人對如何解決這個問題有想法或提示嗎?提前致謝 !
uj5u.com熱心網友回復:
在 MySQL 8 上,您可以使用 row_number
with cte as
( select *,row_number() over(partition by orderid order by timestamps desc ) as row_num
from orders
where order_status='Placed'
) select orderid,clientid,timestamps,order_status
from cte
where row_num=1;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7412ae974e31e3c9a0027e6a9808619d
uj5u.com熱心網友回復:
對于低于 8.0 的版本
select * from
(select orderid,clientid,max(timestamps) timestamps,order_status
from orders
where order_status='Placed'
group by orderid,clientid,order_status) t
DB小提琴在這里。
uj5u.com熱心網友回復:
我首先使用 group by 和count在每個 orderid 中查找不同的時間戳,使用 where 子句僅顯示 order_status 的放置位置,選擇每個 orderid 中的最后一個時間戳
with
distinct_timestamps as
(
select orderid
from orders
group by orderid, timestamps
having count(*)=1
)
select orders.orderid
,max(orders.timestamps) as timestamps
,max(orders.clientid) as clientid
,max(order_status) as order_status
from orders join distinct_timestamps
on distinct_timestamps.orderid = orders.orderid
where orders.order_status = 'Placed'
group by orders.orderid
| 訂單號 | 時間戳 | 客戶編號 | 訂單狀態 |
|---|---|---|---|
| 1234 | 2022-01-01 09:00:00 | 885 | 放置 |
| 1235 | 2022-01-01 14:00:00 | 885 | 放置 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486179.html
上一篇:Angular::ERRORTypeError:無法讀取未定義的屬性(正在讀取“電子郵件”)
下一篇:我需要一個串列中的字典
