Access SQL-连续数周失败

Access SQL-连续数周失败,sql,ms-access,vba,Sql,Ms Access,Vba,我在Access中有一个表,其中记录了每个人每天的测试结果。有些人可能在同一天参加了不止一次测试。我已将此表的简化版本显示如下: | ID | testDate | Person | Pass? | ConsecFailDays | ---------------------------------------------------------- | 01 | 01/08/18 | John | Fail | | | 02 |

我在Access中有一个表,其中记录了每个人每天的测试结果。有些人可能在同一天参加了不止一次测试。我已将此表的简化版本显示如下:

|  ID | testDate  |  Person   |   Pass? | ConsecFailDays |
----------------------------------------------------------
|  01 |  01/08/18 |  John     |  Fail   |                |
|  02 |  01/08/18 |  John     |  Pass   |                |
|  03 |  03/08/18 |  John     |  Fail   |                |
|  04 |  01/08/18 |  Mark     |  Fail   |                |
|  05 |  02/08/18 |  Mark     |  Pass   |                |
我曾尝试编写一个SQL更新查询,该查询将使用该人员至少一次测试失败的连续天数(不一定是连续日历天数)更新最后一列,而只是他们实际进行测试的天数。最终结果应该是这样的

|  ID | testDate  |  Person   |   Pass? | ConsecFailDays |
----------------------------------------------------------
|  01 |  01/08/18 |  John     |  Fail   |       1        |
|  02 |  01/08/18 |  John     |  Pass   |       1        |
|  03 |  03/08/18 |  John     |  Fail   |       2        |
|  04 |  01/08/18 |  Mark     |  Fail   |       1        |
|  05 |  02/08/18 |  Mark     |  Pass   |       0        |
我真的很难做到这一点,最后我求助于使用VBA为每个独特的人创建一个记录集,然后每天循环检查这个人是否在那天失败。我的数据集相当大,运行起来需要几个小时


我希望对整个数据集进行操作的查询会快得多。有人知道是否有SQL解决方案吗?

您需要几个子查询来获取测试通过且没有失败的最后日期,然后计算此日期和测试日期之间的天数:

选择t1.ID ,t1.testDate ,t1.1人 ,t1.[通过?] , 选择counttestDate 从…起 选择不同的测试日期 人 ,[通过?] 从你的桌子上 AS t2 其中t2。[通过?]=错误 t2.Person=t1.Person 和t2.testDate>=Nz 选择maxt3.testDate 从…起 选择t4.testDate ,t4.1人 从您的表中选择t4 哪里 t4.[通过?]=正确 和 选择计数*作为失败 从您的表中选择t5 其中t5.testDate=t4.testDate t5.人=t4.人 和t5。[通过?]=错误 = 0 作为t3 其中t1.Person=t3.Person
t3.testDate为什么最后一个值是0而第二个值是1?在VBA中这样做可能会更好。虽然可以在MS Access中进行查询,但查询要比在其他数据库中困难得多。最后一个值为0,因为只要他们有一周没有失败,查询就会重置为0。希望这是有意义的第二个值是1,因为前两条记录是在同一天针对同一个人的,并且至少有一条记录失败。不幸的是,在我的问题上,Access是我唯一可用的DB,评论混合了天/日期和周,这有点让人困惑。哦,是的,对不起,我的意思是当其他人都说这无法完成时,一个人不会接受否定的答案。你真是人间的神!我确信我的解决方案可以改进这是我第一次进行更复杂的子查询练习,但这是错误的地方。如果您需要优化的sql代码,请使用适当的示例数据发布我的sql。这就是数据库专业人员常去的地方;
UPDATE yourTable SET ConsecFailDays = DLookUp("ConsecFailDays","newQuery","ID = " & yourTable.ID)