2016-07-02 93 views
0

所以,我有一個選擇查詢,它應該返回有超過3購買以及他們的購買的客戶。例如,如果客戶A有4次採購,我查詢的結果應該包括這個客戶和他的交易(4次採購)。但是有兩次購買的顧客B不應該被包括在結果中,也不應該包括他的兩次交易。我的查詢需要很長時間,我需要在運行過程中停止查詢(殺死它)。但是,我希望查詢的結果具有要求(即3個購買限制)。換句話說,我希望那些將它們的事務插入到結果中的客戶,但是由於中止,事務數目還不是3,因此要從結果中移除以保持需求。我正在考慮使用交易。但我不知道我該怎麼做。這個例子顯示了我想要的。想象一下,這是我原來的表:我可以使用事務處理來確保查詢的結果與查詢結果完全一致嗎?

customer_id purchase_price 
    1   200 
    1   300 
    1   230 
    1   340 
    2   55 
    2   56 
    3   566 
    3   45 
    3   666 

我查詢的期望的結果,如果它終止而不中斷應該是這樣的:

 customer_id purchase_price 
    1   200 
    1   300 
    1   230 
    1   340 
    3   566 
    3   45 
    3   666 

但不是這樣的:

customer_id purchase_price 
    1   200 
    1   300 
    1   230 
    1   340 
    3   566 
    3   45 

在換句話說,如果程序在終止之前停止(程序在爲客戶3插入每個事務之前停止),我應該得到如下所示的結果:

customer_id purchase_price 
    1   200 
    1   300 
    1   230 
    1   340 
+1

用你正在使用的數據庫標記你的問題。樣本數據和期望的結果也很有幫助。 –

+0

@GordonLinoff我編輯了這個問題 – HimanAB

回答

0

大多數數據庫都支持ANSI標準窗口函數。您可以直接做你想要使用它們的內容:

select t.* 
from (select t.*, count(*) over (partition by customer) as cnt 
     from transactions t 
    ) t 
where cnt >= 20; 

MySQL不支持這些功能。相反,你可以這樣做:

select t.* 
from transactions t join 
    (select customer, count(*) 
     from transactions 
     group by customer 
     having count(*) >= 20 
    ) tc 
    on tc.customer = t.customer; 
+0

這是mysql查詢嗎? – HimanAB

+0

@HimanUCC。 。 。第二個是。 –

+0

我想知道你是否明白我想要的。我希望當我殺死查詢(強制停止)時,結果只包括客戶和他們至少有3次購買的交易(這是棘手的部分,客戶將在結果中,但如果我停止查詢) – HimanAB