Sql 如何在数据库中删除5分钟内取消的订单记录?
我有用户购买行为的记录。但是,它很长,包含大量冗余数据。我想删除在5分钟内购买并删除的订单 到目前为止,我的问题是: --表3化学需氧量Sql 如何在数据库中删除5分钟内取消的订单记录?,sql,postgresql,Sql,Postgresql,我有用户购买行为的记录。但是,它很长,包含大量冗余数据。我想删除在5分钟内购买并删除的订单 到目前为止,我的问题是: --表3化学需氧量 select z.user_id, z.date, z.actions, x.name, x.email, x.address sum(z.debit) over (partition by z.seller_id order by z.created_at) -
select z.user_id,
z.date,
z.actions,
x.name,
x.email,
x.address
sum(z.debit) over (partition by z.seller_id order by z.created_at) -
sum(z.credit) over (partition by z.seller_id order by z.created_at)
as balance
from table_1 z
left join
table_2 x
on z.seller_id = x.uid
order by seller_id, created_at
为了简单起见,我得到了这个结果
user actions credit debit balance date
1 do_action_A 5000 0 5000 2020-01-01 1:00:00 #no need these 2
1 cancel_A 0 5000 0 2020-01-01 1:03:00 #in result
1 do_action_A 5000 0 5000 2020-01-01 1:10:00
1 do_action_b 3000 0 8000 2020-01-01 1:20:00
1 do_action_c 0 7000 1000 2020-01-01 1:30:00
2 do_action_A 5000 0 5000 2020-01-01 1:00:00
2 do_action_B 3000 0 8000 2020-01-01 1:10:00
我们知道用户只能在5分钟内取消订单,不幸的是,取消的次数很多。我需要使这个数据表简单和简短,以便跟踪和可视化它容易
这是我的期望:
user actions credit debit balance date
1 do_action_A 5000 0 5000 2020-01-01 1:10:00
1 do_action_b 3000 0 8000 2020-01-01 1:20:00
1 do_action_c 0 7000 1000 2020-01-01 1:30:00
2 do_action_A 5000 0 5000 2020-01-01 1:00:00
2 do_action_B 3000 0 8000 2020-01-01 1:10:00
您可以尝试使用lead()
为每个查询命中SQL将非常昂贵。我的建议是在您的服务和数据库之间使用直写缓存来处理快速写入。@Seema,确实很昂贵,这就是为什么,我在考虑表中的小数据我通常还有两列来识别取消的订单,如
isCancelled=1
和cancellation\u id=1234您要做的是查询昂贵的操作,我建议你们找到解决办法。若用户购买了两次并取消了第一次呢one@DervişKayımbaşıoğlu,那么,在这种情况下有什么建议吗?如果是这样的话,这个问题就行不通了。因此,它不能被接受为答案。正如我在问题中已经建议的那样,您需要有isCancelled和CancellationId
select * from
(
select z.user_id,z.date,z.actions,x.name,
x.email,x.address,debtit, credit, balance,
lead(z.actions) over(parition by z.user_id order by z.created_at) as next_action
from table_1 z left join table_2 x
on z.seller_id = x.uid
)A where next_action not like '%cancel%' and actions not like '%cancel%'