2017-05-25 26 views
0

我有一個「transaction_status」表:獲得通過分組記錄和剔除重複

id transaction_id status 
1   12   0 
2   13   0 
3   12   -1 
4   14   0 
5   13   -1 
6   15   0 
[END OF TABLE] 

我需要得到事務ID只與狀態= 0的記錄。

例如,這就是我要尋找從上表中:

id transaction_id status 
4   14   0 
6   15   0 

到目前爲止,我想:

SELECT id, transaction_id, status 
FROM transaction_status 
WHERE status = 0 OR status = -1 
ORDER BY status ASC 
GROUP BY txn_id 
HAVING status = 0 

,但沒有運氣。我正在用盡想法。請任何想法?謝謝!

回答

1

在having子句中做了一個小改動。

SELECT id, transaction_id, status 
FROM transaction_status 
WHERE status = 0 OR status = -1 
GROUP BY transaction_id 
HAVING min(status) = 0 

編輯:另外通過,因爲它沒有任何意義

+0

@TimBiegeleisen剛剛意識到通過在之間使用順序。更正 – Akhil

+0

它的工作原理!但我可以通過ID DESC命令結果嗎?我在GROUP BY之前和之後放置了'ORDER BY ID',但它不起作用。請幫忙 – karlosuccess

+0

@karlosuccess在 – Akhil

0

我認爲處理這個最簡單的方法是通過transaction_id使用條件聚集和計數哪個ID只的0狀態相關刪除訂單跟他們。在子查詢中執行此操作,然後返回到主表以檢索所需的完整匹配記錄。

SELECT t1.* 
FROM transaction_status t1 
INNER JOIN 
(
    SELECT transaction_id 
    FROM transaction_status 
    GROUP BY transaction_id 
    HAVING SUM(CASE WHEN status <> 0 THEN 1 ELSE 0 END) = 0 
) t2 
    ON t1.transaction_id = t2.transaction_id 
ORDER BY t1.id DESC 
1

使用GROUP BYhaving條款同時檢查minmax狀態0

查詢

select `transaction_id` 
from `your_table_name` 
group by`transaction_id` 
having min(`status`) = 0 and max(`status`) = 0; 
+0

這太好了。這是工作!我如何通過id ASC訂購結果?我在GROUP BY之前和之後放置了ORDER BY,但它不起作用。請任何想法? – karlosuccess