所以,我有一个选择查询,它应该返回购买超过3次的客户。例如,如果客户A有4次购买,我的查询结果应包括此客户及其交易(4次购买时为4行)。但是有2次购买的顾客B,不应该包括在结果中,也不应该包括他的2次交易。我的查询需要太长时间,我需要在运行过程中停止查询(终止它)。但是,我希望查询的结果具有要求(即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
答案 0 :(得分: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;