MySQL-根据先前的顺序选择顺序中的下一项

时间:2019-06-07 09:43:51

标签: mysql sql

我有一个表来存储值(如果它们按顺序一起出现)。例如:

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个或更多级别的方式来构造它?

谢谢:)

2 个答案:

答案 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`;