根据前一行的值对 SQL 查询进行排序

奥斯卡安东尼

我设计了一个数据库,其中存储了执行流程所需的所有信息。我所说的“过程”是指一系列的多个步骤,或者换句话说,一个配方。每个配方(在我的例子中是任务)包含几个步骤。给定的步骤可以出现在不同的配方中。

这是我拥有的 3 个表的示例(带有随机数据):

工艺表

+----+------+------+--------+-----------+
| ID | Task | Step | NextID | StartHere |
+----+------+------+--------+-----------+
|  1 |    2 |    1 |      4 | TRUE      |
|  2 |    2 |    5 |      8 | FALSE     |
|  3 |    4 |    5 |      9 | FALSE     |
|  4 |    2 |    2 |      2 | FALSE     |
|  5 |    4 |    2 |      6 | FALSE     |
|  6 |    4 |    4 |      3 | FALSE     |
|  7 |    4 |    1 |      5 | TRUE      |
|  8 |    2 |   15 |      0 | FALSE     |
|  9 |    4 |   15 |      0 | FALSE     |
+----+------+------+--------+-----------+

任务表

+--------+--------------+
| TaskID |   TaskName   |
+--------+--------------+
|      1 | Buy Disk     |
|      2 | Play Disk    |
|      3 | Buy Digital  |
|      4 | Play Digital |
+--------+--------------+

台阶稳定

+--------+-----------------+
| StepID |    StepName     |
+--------+-----------------+
|      1 | Turn Console On |
|      2 | Log In          |
|      4 | Insert Disk     |
|      5 | Open Game       |
|     15 | Enjoy           |
+--------+-----------------+

这是上面流程表,但包含步骤和任务的实际名称。用这张表可能更容易理解:

+----+--------------+-----------------+--------+-----------+
| ID |     Task     |      Step       | NextID | StartHere |
+----+--------------+-----------------+--------+-----------+
|  1 | Play Disk    | Turn Console On |      4 | TRUE      |
|  2 | Play Disk    | Open Game       |      8 | FALSE     |
|  3 | Play Digital | Open Game       |      9 | FALSE     |
|  4 | Play Disk    | Log In          |      2 | FALSE     |
|  5 | Play Digital | Log In          |      6 | FALSE     |
|  6 | Play Digital | Insert Disk     |      3 | FALSE     |
|  7 | Play Digital | Turn Console On |      5 | TRUE      |
|  8 | Play Disk    | Enjoy           |      0 | FALSE     |
|  9 | Play Digital | Enjoy           |      0 | FALSE     |
+----+--------------+-----------------+--------+-----------+

如图所示,在Process表中,每条记录(行)代表任务和步骤的组合。NextID遵循配方时,列包含下一个任务-步骤组合的 ID。NextID0标志任务的结束。StartHere列是一个布尔指定根据任务要执行的第一个步骤。

按照这个逻辑,为了“玩数字游戏”,你需要先打开控制台,然后登录,然后打开游戏,最后享受你的游戏会话。

我的问题是:我想找到一种方法来查询完成给定任务所需的所有步骤,并按照适当的顺序(根据Process执行它们的顺序)对它们进行排序有人知道如何做到这一点(如果可能,在一个查询中)?

基本上,查询应先拿到StepName其中行的StartHereTRUE,再拿到StepName有一个行的ID等于NextID前一行等。

我想出了以下查询,但当然这并没有给我正确的顺序:

SELECT Step.StepName 
FROM Step
    INNER JOIN Process ON Step.StepID = Process.Step
    INNER JOIN Task ON Process.Task = Task.TaskID
WHERE Task.TaskID = 4
ORDER BY Process.NextID

欢迎任何提示的帮助!

谢谢

编辑:根据评论中的要求,如果为“播放数字”任务完成了此类查询的预期结果:

+-----------------+
|    StepNane     |
+-----------------+
| Turn Console On |
| Log In          |
| Open Game       |
| Enjoy           |
+-----------------+
马斯塔舒夫

使用CTE,以Next id的形式获取子节点原理...

declare @mytable table
(id int,
task varchar(50),
step varchar(50),
nextid int
)


insert into @mytable
values 
(  1 ,'Play Disk    ','Turn Console On ',      4 ),
(  2 ,'Play Disk   ','Open Game       ',      8 ),
(  3 ,'Play Digital ','Open Game       ',      9 ),
(  4 ,'Play Disk    ','Log In          ',      2 ),
(  5 ,'Play Digital ','Log In          ',     6 ),
(  6 ,'Play Digital ','Insert Disk     ',     3 ),
(  7 ,'Play Digital ','Turn Console On ',      5 ),
(  8 ,'Play Disk    ','Enjoy           ',      0 ),
(  9 ,'Play Digital ','Enjoy           ',      0 )


;with mycte
as 
(
 select * from @mytable  where id = 1 -- to start from this ID, if you want this your START here column with true then eventually you will have multiple outputs
 union all
 select t.* from @mytable t
 inner join mycte c on c.nextid = t.id
 )
select * from mycte;

结果,从 1 开始

id  task            step                nextid
1   Play Disk       Turn Console On     4
4   Play Disk       Log In              2
2   Play Disk       Open Game           8
8   Play Disk       Enjoy               0

结果,从7开始

id  task            step                nextid
7   Play Digital    Turn Console On     5
5   Play Digital    Log In              6
6   Play Digital    Insert Disk         3
3   Play Digital    Open Game           9
9   Play Digital    Enjoy               0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询输出:根据字段值插入一行

来自分类Dev

如何根据上一行中的值对sql结果进行排序?

来自分类Dev

SQL查询以根据最大常见结果对结果进行排序

来自分类Dev

Sql Select 查询 - 如何根据 ID 进行排序

来自分类Dev

SQL:基于另一个查询的值的顺序对查询结果进行排序

来自分类Dev

MSAccess中的SQL查询可根据其排序顺序对带有字母的值列进行排名

来自分类Dev

SQL-根据前一行的值有条件地合并行

来自分类Dev

SQL:如何根据条件用前一行值填充空单元格?

来自分类Dev

使用两个排序值对Group by进行SQL查询并计算相等的值

来自分类Dev

SQL:如何在按行排序查询时,按日期(DESC)对查询进行排序,同时使行的列指定值位于顶部?

来自分类Dev

SQL查询基于其他列值对数据进行排序

来自分类Dev

自定义 SQL 查询,用于使用“-”作为分隔符对值进行排序

来自分类Dev

SQL查询:获取每一行的调整值

来自分类Dev

如何对一个SQL查询的结果与其他表的数据进行排序

来自分类Dev

按IN的顺序对SQL查询进行排序

来自分类Dev

Python不对sql查询结果进行排序

来自分类Dev

SQL:根据前一行插入一个新的唯一行

来自分类Dev

SQL查询根据ID将多行合并为一个,同时将其他值保留在同一行中?

来自分类Dev

SQL:如何根据前一行更新一行

来自分类Dev

根据第一行值对观察值进行分组

来自分类Dev

SQL Select distinct 根据值排除一行

来自分类Dev

根据另一行中的值对Excel行进行排序

来自分类Dev

根据最后一行的值按列对Deedle Frame进行排序

来自分类Dev

一种在一行中组合聚合值和非聚合值的SQL查询

来自分类Dev

根据数组索引对查询结果进行排序

来自分类Dev

sql根据日期时间查询当前行和上一行之间的差异

来自分类Dev

我需要执行一个从两个表中提取数据并对其进行排序的 SQL 查询

来自分类Dev

Django:根据另一行的值进行过滤

来自分类Dev

根据上一行中的值进行分组

Related 相关文章

  1. 1

    SQL查询输出:根据字段值插入一行

  2. 2

    如何根据上一行中的值对sql结果进行排序?

  3. 3

    SQL查询以根据最大常见结果对结果进行排序

  4. 4

    Sql Select 查询 - 如何根据 ID 进行排序

  5. 5

    SQL:基于另一个查询的值的顺序对查询结果进行排序

  6. 6

    MSAccess中的SQL查询可根据其排序顺序对带有字母的值列进行排名

  7. 7

    SQL-根据前一行的值有条件地合并行

  8. 8

    SQL:如何根据条件用前一行值填充空单元格?

  9. 9

    使用两个排序值对Group by进行SQL查询并计算相等的值

  10. 10

    SQL:如何在按行排序查询时,按日期(DESC)对查询进行排序,同时使行的列指定值位于顶部?

  11. 11

    SQL查询基于其他列值对数据进行排序

  12. 12

    自定义 SQL 查询,用于使用“-”作为分隔符对值进行排序

  13. 13

    SQL查询:获取每一行的调整值

  14. 14

    如何对一个SQL查询的结果与其他表的数据进行排序

  15. 15

    按IN的顺序对SQL查询进行排序

  16. 16

    Python不对sql查询结果进行排序

  17. 17

    SQL:根据前一行插入一个新的唯一行

  18. 18

    SQL查询根据ID将多行合并为一个,同时将其他值保留在同一行中?

  19. 19

    SQL:如何根据前一行更新一行

  20. 20

    根据第一行值对观察值进行分组

  21. 21

    SQL Select distinct 根据值排除一行

  22. 22

    根据另一行中的值对Excel行进行排序

  23. 23

    根据最后一行的值按列对Deedle Frame进行排序

  24. 24

    一种在一行中组合聚合值和非聚合值的SQL查询

  25. 25

    根据数组索引对查询结果进行排序

  26. 26

    sql根据日期时间查询当前行和上一行之间的差异

  27. 27

    我需要执行一个从两个表中提取数据并对其进行排序的 SQL 查询

  28. 28

    Django:根据另一行的值进行过滤

  29. 29

    根据上一行中的值进行分组

热门标签

归档