在我的数据库中有数万行。有两列,收据和优惠券。每个“收据”值跨越6行,具有相同的收据值和不同的“优惠券”值。
Ex数据库 -
receipt coupon
500 1-mon
500 2-mon
500 3-mon
500 4-mon
500 5-mon
500 6-mon
501 1-mon
501 2-mon
501 3-mon
501 4-mon
501 5-mon
501 6-mon
502 1-mon
502 2-mon
502 3-mon
502 4-mon
502 5-mon
502 6-mon
我正在尝试更新查询,更新每个收据ID的第一个实例的优惠券列,然后明智的所有第二个不同收据实例等等
我尝试了以下查询,但这没有正确更新行...
update scheme_master set coupon = '3-month' where id % 6 = 1;
答案 0 :(得分:0)
%
语法建议SQL Server,所以我想你想要这样的东西:
with toupdate as (
select sm.*,
row_number() over (partition by receipt order by id) as seqnum
from scheme_master sm
)
update toupdate
set coupon = cast(seqnum as varchar(255)) + '-month';
但是,在您的示例查询中,您使用的是“3”和“1”,我不明白:
update scheme_master set coupon = '3-month' where id % 6 = 1;
-----------------------------------^ ----------------------^
编辑:
在MySQL中,你可以这样做:
update scheme_master
set coupon = concat((@rn := if(@r = receipt, @rn := @rn + 1,
if(@r := receipt, 1, 1)
)
), '-month')
order by receipt, id;