Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/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
Ms access 如何提高临时表计数的效率_Ms Access - Fatal编程技术网

Ms access 如何提高临时表计数的效率

Ms access 如何提高临时表计数的效率,ms-access,Ms Access,我试图向access表中添加一个count字段,该字段按时间顺序为另一个字段中的每个重复记录递增 因此,每当uniquecase重复时,计数器将增加1。这也是按时间顺序排列的,因此副本编号为1向上,从最早的副本开始,例如 Counter | UniqueCase | ResolvedDate 1 3312 01/01/2018 1 6374 01/01/2018 2 6374 02/01/2018 1

我试图向access表中添加一个count字段,该字段按时间顺序为另一个字段中的每个重复记录递增

因此,每当uniquecase重复时,计数器将增加1。这也是按时间顺序排列的,因此副本编号为1向上,从最早的副本开始,例如

Counter | UniqueCase | ResolvedDate
1          3312        01/01/2018
1          6374        01/01/2018
2          6374        02/01/2018
1          8546        15/03/2019
2          8546        18/03/2019
3          8546        12/05/2019
以下查询适用于这种情况:

SELECT
  (SELECT COUNT(*)
   FROM [COMEBACKTEST2] 
     AS TMP
   WHERE [UNIQUECASE]=[COMEBACKTEST2].[UNIQUECASE] 
     AND [KEY]<=[COMEBACKTEST2].[KEY]
  ) AS [COUNTER],
  *
INTO [Comeback 3]
FROM COMEBACKTEST2
ORDER BY COMEBACKTEST2.UniqueCase, COMEBACKTEST2.ResolvedDate;
当我查看这个时,需要几秒钟的时间,我可以看到结果是正确的,我扫描了几千行。但是,在尝试运行时,即使离开它几个小时,它也不会完成

这个查询是否有更有效的版本,因为在它的当前状态下,它似乎过于密集而无法实际工作

[COMEBACKTEST2]中大约有130k行 我试过索引 我试着只是查询,而不是添加 我猜它需要一个完全不同的方法? 任何帮助都将不胜感激,谢谢

上面的示例丢失了格式对不起:

Access SQL优化器并不复杂,因此它很可能会为外部查询的每一行重新运行嵌套查询,因此运行整个SELECT INTO需要很长的时间。通常,最好避免在SELECT子句中使用嵌套查询,而是在聚合查询中使用join。困难在于基于不等式计算记录。为此,我们利用交叉连接,即笛卡尔积,然后仅在产品的一侧对关键值进行分组

SELECT COUNTER.Sequence, t3.*
INTO [Comeback 3]
FROM COMEBACKTEST2 AS t3 JOIN
  (SELECT Count(t1.KEY) AS Sequence, t1.UNIQUECASE, t1.KEY
   FROM COMEBACKTEST2 AS t1, COMEBACKTEST2 AS t2
   WHERE ((t2.UNIQUECASE = t1.[UNIQUECASE]) AND (t2.KEY <= t1.[KEY]))
   GROUP BY t1.UNIQUECASE, t1.KEY
  ) AS [COUNTER]
  ON (t3.UNIQUECASE= COUNTER.UNIQUECASE) AND (t3.KEY = COUNTER.KEY)
ORDER BY t3.UNIQUECASE, COUNTER.Sequence;
最好还是有适当的索引。在这种情况下,请确保[UniqueCase]和[Key]上有单独的索引

如果您希望随示例列返回其他列,则需要使用上述表单。但是,只要[ResolvedDate]按时间顺序与所述的[Key]值对应,则可以在单个查询中获得所有过账的列:

SELECT Count(t1.KEY) AS Sequence, t1.UNIQUECASE, 
    t1.KEY, Max(t2.ResolvedDate) AS ResolvedDate
FROM COMEBACKTEST2 AS t1, COMEBACKTEST2 AS t2
WHERE ((t2.UNIQUECASE = t1.[UNIQUECASE]) AND (t2.KEY <= t1.[KEY]))
GROUP BY t1.UNIQUECASE, t1.KEY
ORDER BY t1.UNIQUECASE, t1.KEY;

请提供准确的细节,而不是关键细节的摘要。描述您尝试的精确索引与显示SQL代码一样重要,特别是当问题是关于查询效率的时候。仅供参考。使用适当的标记可以保留格式。“问题”编辑框有一个带有各种格式按钮的工具栏。您也可以单击?工具栏上的按钮/图标,获取有关格式化文档的更多帮助。