我正在尝试查询数据库以仅提取重复/旧数据以写入excel的草稿区(使用将SQL传递给数据库的宏)。
就目前而言,我目前仅在Access中进行测试以仅过滤掉旧数据。
首先,我试图通过指定的WorkOrder,RunNumber和Row来过滤数据库。
下面的代码仅按工作订单,运行编号和行过滤。 ...但是当我使用第二个AND语句时,SQL不喜欢;因此目前无法使用。
SELECT *
FROM DataPoints
WHERE (((DataPoints.[WorkOrder])=[WO2]) AND ((DataPoints.[RunNumber])=6) AND ((DataPoints.[Row]=1)
一旦我找出那部分...。
然后,如果只有1个条目具有指定的WorkOrder,RunNumber和Row,那么我想将其过滤掉。 (在草稿部分不需要,因为它的数据已经写到报告的主要部分)
如果有2个或更多具有上述条件的条目(WO,RN和行),那么我想根据RunDate和RunTime筛选出最新的条目,而只保留所有较旧的条目。
例如,在下面的剪辑中。我过滤的查询中剩余的唯一项目将是时间戳为11:47:00 AM的顶部条目。
。
有没有推荐的命令来解决此问题?任何想法都是有帮助的。谢谢。
答案 0 :(得分:0)
代码段的末尾还需要两个)。或者,您可以在此示例中完全删除括号,MS Access会视需要将其重新添加。
硕士Access SQL可能很棘手,因为它不符合标准,或者不允许进行超复杂的查询,或者需要进行一些丑陋的处理,例如在尝试连接两个以上的表时遇到了括号嵌套的噩梦。
由于这些原因,我建议使用多个Access查询来产生结果。
答案 1 :(得分:0)
我会建议以下内容:
select t.*
from datapoints t
where
t.workorder = [WO2] and
t.runnumber = 6 and
t.row = 1 and
exists
(
select 1
from datapoints u
where
u.workorder = t.workorder and
u.runnumber = t.runnumber and
u.row = t.row and
(u.rundate > t.rundate or (u.rundate = t.rundate and u.runtime > t.runtime))
)
在这里,如果where
子句中的相关子查询找到具有相同的workorder
,runnumber
和row
,但后一个{{1} }或相同的rundate
和更高版本的rundate
,然后记录由主查询返回。