请注意,我在MS Access中执行此操作,因此可以使用基本SQL运算符的解决方案。
假设你有一张表,其中每一行代表一系列硬币翻转中的硬币翻转。
免责声明:我使用硬币翻转作为类比,因此我不必解释我的实际数据集。
SELECT * FROM CoinFlips;
Id Flip Time
-------------------
1 Heads 1
2 Tails 2
3 Heads 3
4 Heads 4
5 Heads 5
6 Tails 6
您如何编写一个返回上述所有行的查询,其中包含一个计算' head'发生在该行发生之前的翻转。换句话说,这就是我想要的结果:
所需输出
Id Flip Time NumHeads
--------------------------------
1 Heads 1 1
2 Tails 2 1
3 Heads 3 2
4 Heads 4 3
5 Heads 5 4
6 Tails 6 4
答案 0 :(得分:1)
要在MS Access中执行此操作,您需要相关子查询或加入/聚合。其他数据库直接支持此功能,但不支持MS Access。
select cf.*,
(select count(*)
from CoinFlips as cf2
where cf2.flip = 'Heads' and cf2.id <= cf.id
) as NumHeads
from CoinFlips as cf;
答案 1 :(得分:0)
这里有一个解决方案
SELECT coinFlips.ID
,coinFlips.Flip
,coinFlips.TIME
,DCount("Flip", "coinFlips", "ID <=" & [Time] & "AND Flip ='Heads'") AS CountHeads
,DCount("Flip", "coinFlips", "ID <=" & [Time] & "AND Flip ='" & [Flip] & "'") AS CountEachOccurence
FROM coinFlips;