我有一张牌桌和一张牌桌(在一张牌上),例如:
declare @cards table
(
id_card int,
cycle int
)
insert into @cards (id_card, cycle) values (1, 10)
declare @moves table
(
id_move int,
id_card int,
quantity int
)
insert into @moves (id_move, id_card, quantity) values (1, 1, 2)
insert into @moves (id_move, id_card, quantity) values (2, 1, 4)
insert into @moves (id_move, id_card, quantity) values (3, 1, 2)
insert into @moves (id_move, id_card, quantity) values (4, 1, 8)
insert into @moves (id_move, id_card, quantity) values (5, 1, 2)
问题:每张牌都有一个循环大小,每一步都有一个数量。因此,卡片周期大小为 10 和 18 步意味着 1 个完整周期加 8 步。我必须找到最后一个循环的第一步(给定示例中的移动 id 4)。这个问题听起来(起初)微不足道,但我遇到了很多麻烦来找到我认为我做错了什么的举动。
我想出了一个查询,它给出了最后一个循环第一次移动开始位置的位置,但我找不到从那里去的任何地方。
select
id_card,
case
when value > quantity then value - quantity
else value
end value
from
(
select
f.id_card,
f.quantity,
f.quantity - f.quantity % cards.cycle + 1 value
from
(
select
id_card,
sum(quantity) quantity
from @moves
group by
id_card
) f
join @cards cards on
cards.id_card = f.id_card
) f
预期输出:
id_move
4
有任何想法吗?我可以进行任何修改以使问题更容易。