2014-10-30 93 views
0

我有2個數據庫表都共享一個訂單號列。如何編寫SQL查詢以在一個表中顯示最新的事務?

一張表是「訂單」,訂單號是唯一的關鍵。

第二個表是我的「交易」表,每個訂單號都有一行,每筆交易。基於我們每月支付的事實,「交易」表格顯然具有多行,具有唯一的日期,但是每個訂單號有許多重複。

如何運行一個列中包含唯一OrderNumber列表的查詢,以及第二列中最新的「TransDate」(交易日期)。

我嘗試了下面,但它拉回每個訂單號碼,而不是最新的一個存在的第一個TransDate。我想我需要某種類型的子查詢:

select orders.ordernumber, transdate from orders 
join transactions on transactions.ordernumber = orders.ordernumber 
where status = 'booking' 
group by ordernumber 
order by orders.ordernumber, TransDate DESC 
+0

您希望每個訂單號的最近交易日期? – 2014-10-30 16:20:57

回答

3

你應該只使用MAX()功能全面查詢並附上訂單編號。這裏似乎也沒有任何理由要加入。

SELECT 
    ordernumber, 
    MAX(transdate) AS maxtransdate 
FROM transactions 
WHERE status = 'booking' 
GROUP BY ordernumber 
ORDER BY ordernumber ASC 
+0

非常感謝Mike – 2014-10-30 16:55:03

0

更改order by

order by Transdate DESC, orders.ordernumber 

下面是與變化

select orders.ordernumber, transdate from orders 
join transactions on transactions.ordernumber = orders.ordernumber 
where status = 'booking' 
group by ordernumber 
order by Transdate DESC, orders.ordernumber 
+0

我有批評他嗎?我沒有看到。 – NETRookie 2014-10-30 17:46:50

1

使用聚合函數,具體max()

select o.ordernumber, max(transdate) as last_transdate 
from orders as o 
    inner join transactions as t on o.ordernumber = t.ordernumber 
-- where conditions go here 
group by ordernumber 

如果你需要拉的最後一筆交易的細節每個訂單,您可以使用上面的查詢作爲另一個查詢的數據源,加入交易表:

select a.*, t.* 
from (
     select o.ordernumber, max(transdate) as last_transdate 
     from orders as o 
      inner join transactions as t on o.ordernumber = t.ordernumber 
     -- where conditions go here 
     group by ordernumber 
    ) as a 
inner join transactions as t on a.ordernumber = t.ordernumber and a.last_transdate = t.transdate 
+0

謝謝你的幫助。邁克在這個場合偷偷摸摸的。 – 2014-10-30 16:55:21

相關問題