2016-08-04 80 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 
相关问题