我有一个表来存储值(如果它们按顺序一起出现)。例如:
value_a | value_b | count
-------------------------
1 | 2 | 5
1 | 3 | 4
2 | 3 | 7
该计数存储value_b
之后出现value_a
的次数。使用这个,我可以创建一个基于概率的序列。例如,我可以选择任何随机值来启动序列-在这种情况下为 1 -并选择之前遵循的值:
> SELECT value_b FROM values WHERE value = 1
value_b
-------
2
3
我的序列现在是 1、2
我想做的是添加一个额外的查找。一旦有了一个值-在这种情况下为 2 -我想选择紧随其后的任何值,但只能按顺序执行:
SELECT value_b FROM values WHERE value = 2
AND
* magic line to only include to cases where 2 also followed 1 *
是否可以在不更改架构的情况下完成此操作,或者我已经丢失了所需的信息(据我怀疑)?
如果我确实需要更改架构以添加额外的维度,那么是否可以以一种可以简单地回顾3个或更多级别的方式来构造它?
谢谢:)
答案 0 :(得分:0)
为什么不像
一样在值表上进行其他联接select v1.value_b, v2.value_b from values v1
inner/left join values v2 on v1.value_2=v2.value_1
where v1.value_1=1
如果需要或不希望找不到下一个值的行,则需要使用向左/向内,取决于。如果需要多个迭代,则需要使用更多的联接。
答案 1 :(得分:0)
这将获得一个以特定值开头的三值序列。删除WHERE子句以获取所有3个值序列的完整列表。它不会显示任何小于或大于3个值的序列。
SELECT
a.`value_a` as `seq_1`,
a.`value_b` as `seq_2`,
b.`value_b` as `seq_3`
FROM `values` a
JOIN `values` b
ON a.`value_b` = b.`value_a`
WHERE a.`value_a` = 1
GROUP BY a.`value_a`, a.`value_b`, b.`value_b`
ORDER BY a.`value_a`, a.`value_b`, b.`value_b`;