2017-09-14 42 views
1

我有一個訂單表,我需要找到重複項 - 具有相同dd_number和dd_code的訂單,但其中一個訂單必須具有「checkout_completed」狀態。在mySQL中查找重複項但具有特定狀態

以下是我當前的SQL它正確地找到複製具有相同dd_number和dd_code訂單,但我不能工作,如何檢查狀態:

SELECT 
      tbOrders.id, tbOrders.dd_number, tbOrders.dd_code, tbOrders.status, COUNT(*) AS totalDupes 
     FROM 
      tbOrders 
     WHERE 
      dd_number IS NOT NULL 
     AND 
      dd_number != '' 
     AND 
      dd_number != '000000' 
     AND 
      dd_number != '00000000' 
     GROUP BY 
      dd_number, dd_code 
     HAVING totalDupes > 1 

添加一個WHERE的狀態條=' checkout_complete'不起作用,因爲它要求兩個訂單具有相同的狀態。任何幫助將不勝感激!

+0

'id'和'status'不在聚合函數中? – LONG

回答

1
SELECT 
     tbOrders.id, tbOrders.dd_number, tbOrders.dd_code, tbOrders.status, COUNT(*) AS totalDupes, 
SUM(CASE WHEN status='checkout_complete' THEN 1 ELSE 0 END) as status_count 
    FROM 
     tbOrders 
    WHERE 
     dd_number IS NOT NULL 
    AND 
     dd_number != '' 
    AND 
     dd_number != '000000' 
    AND 
     dd_number != '00000000' 
    GROUP BY 
     dd_number, dd_code 
    HAVING totalDupes > 1 and status_count=1 

您可以用狀態

+0

完美的作品!謝謝! –

1

嗯,做的多渠道引入一個新的合計字段計數記錄。我建議使用HAVING條款與條件彙總:

HAVING totalDupes > 1 
    AND MAX(CASE WHEN status = 'checkout_complete' THEN 1 ELSE 0 END) = 1 

雖然您的查詢似乎是錯誤的。如果ID是唯一的,則隨機選擇IDSTATUS也是如此。所有的列都應該在GROUP BY中,或者用聚合函數包裝。請注意,只有MySQL舊版本接受你的語法。在任何其他RDBMS中,這會引發錯誤。

+0

可以確認也是有效的 –