Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于条件向SQLite数据库中的列添加重复序列号_Sqlite_Sql Update - Fatal编程技术网

基于条件向SQLite数据库中的列添加重复序列号

基于条件向SQLite数据库中的列添加重复序列号,sqlite,sql-update,Sqlite,Sql Update,我在SQLite数据库中添加了一列,需要插入重复的序列号,从1…n开始,但它是基于其他列的分组。当有新的分组时,序列需要再次从1开始 这是我的桌子: 创建表ProdRunResults ID INTEGER主键非空唯一、SeqNumbr INTEGER、Shift INTEGER、ShiftSeqNumbr INTEGER、Date DATETIME、ProdRunID INTEGER、Result VARCHAR ShiftSeqNumbr是一个新的列,我需要根据ProdRunID列中的数字分

我在SQLite数据库中添加了一列,需要插入重复的序列号,从1…n开始,但它是基于其他列的分组。当有新的分组时,序列需要再次从1开始

这是我的桌子: 创建表ProdRunResults ID INTEGER主键非空唯一、SeqNumbr INTEGER、Shift INTEGER、ShiftSeqNumbr INTEGER、Date DATETIME、ProdRunID INTEGER、Result VARCHAR

ShiftSeqNumbr是一个新的列,我需要根据ProdRunID列中的数字分组,然后根据Shift列中的数字填充序列号

在24小时内最多可以有3个班次

我拼凑了一些代码来实现这一点,但它以相反的降序将序列号添加到ShiftSeqNumbr列:

UPDATE ProdRunResults 
SET ShiftSeqNumbr = (SELECT COUNT (*)
FROM ProdRunResults AS N
WHERE N.ProdRunID = ProdRunResults.ProdRunID
    AND N.Shift = ProdRunResults.Shift
    AND N.ShiftSeqNumbr = ProdRunResults.ShiftSeqNumbr);

如何更改Update语句,使序列号从1开始向上?或者有更好的方法吗?

UPDATE语句统计ProdRunID/Shift/ShiftSeqNumbr列中有多少行的值与当前行的值相同。当前行在ShiftSeqNumbr中始终有一个空值,因此它正在计算当前组中有多少行尚未更新

您需要计算当前行之前有多少行,即有多少行具有相同的ProdRunID和Shift值,以及相同或更小的SeqNumbr值:


我知道那里的逻辑有缺陷!非常感谢。事实上,我不得不对你的建议做一个小小的改变,因为你的例子给出了相同的结果,序列号递减,但在上一个条件中更改为LT符号修复了它:将ProdRunResults集ShiftSeqNumbr=SELECT COUNT*从ProdRunResults中选择为N,其中N.ProdRunID=ProdRunResults.ProdRunID和N.Shift=ProdRunResults.Shift和N.SeqNumbr
UPDATE ProdRunResults 
SET ShiftSeqNumbr = (SELECT COUNT (*)
                     FROM ProdRunResults AS N
                     WHERE N.ProdRunID =  ProdRunResults.ProdRunID
                       AND N.Shift     =  ProdRunResults.Shift
                       AND N.SeqNumbr  <= ProdRunResults.SeqNumbr);