2016-08-04 91 views
0

我有一張寫有交易數據的表。我需要在加入其他表格時查詢上述優惠,但是d.originalorderid不是唯一條目,我有幾個重複條目。我想:在一個特定列中摺疊具有相同值的行

  1. 對於每一個獨特的d.originalorderid選擇一行
  2. 該行應該是最近的(最大ID)

我怎麼會去嗎?這是我現在的查詢。

SELECT d.id, 
     d.date, 
     d.ip, d.panmask, 
     d.merchantorderid, 
     d.amount, 
     d.cardholder, 
     d.bankhumanname, 
     d.cardtypeid, 
     d.bankcountrycode, 
     d.usercountrycode, 
     mc.paymentkey as merchantname, 
     dt.status, 
     d.merchantcontract, 
     dt.tag, 
     d.originalorderid, 
     ds.refnumber, 
     ds.dealauthcode, 
     mc.processingid, 
     pc.Name as processing, 
     d.customparams  
FROM Deal as d 
LEFT JOIN MerchantContract as mc ON mc.Id = d.MerchantContract 
LEFT JOIN DealTrace as dt ON d.Id = dt.DealId 
    AND dt.id = (SELECT MAX(id) 
       FROM DealTrace WITH (nolock) 
       WHERE DealId = d.id) 
LEFT JOIN DealSummary ds ON d.Id = ds.DealId 
    AND ds.id = (SELECT MAX(id) 
       FROM DealSummary WITH (nolock) 
       WHERE DealId = d.id) 
LEFT JOIN Processing pc on mc.ProcessingId = pc.id 
WHERE (d.MerchantContract IN ('12')) 
ORDER BY ID desc OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY 
+1

你會得到SQL Server和MySQL之間的不同答案。 – shawnt00

+0

通用的方式是在交易之後立即拋出另一個連接:內部連接(通過originalorderid從交易組中選擇originalorderid,max(id)作爲maxorderid)md.originalorderid = d.originalorderid和md.maxid = d .id' – shawnt00

+0

你的問題很混亂。你只提到一個表'交易',但在你的查詢中你使用了很多表。 – jonju

回答

0

如果我理解的要求,而不是加入到交易表,加入到就可以了相關子查詢將返回與具有相同的原始訂單ID的最高交易編號的交易。測試它,但我認爲它確定..

SELECT .... 
FROM 
(SELECT * 
FROM Deal d1 
WHERE d1.Id=(SELECT MAX(Id) 
         FROM Deal d2 
         WHERE d2.OriginalOrderId=d1.OriginalOrderId)) d 
LEFT JOIN MerchantContract as mc ON mc.Id = d.MerchantContract 
etc etc 
相關問題