如何在SQL中仅查询数据库中的旧数据和重复数据

问题描述 投票:1回答:2

我正在尝试查询我的数据库以仅将重复/旧数据写入excel中的临时部分(使用宏将SQL传递给数据库)。

目前,我目前仅在Access中进行测试,仅过滤旧数据。

首先,我试图通过特定的工作订单,RunNumber和Row来过滤我的数据库。

以下代码仅按工作订单,运行编号和行进行筛选。 ...但是当我在第二个AND语句上添加时,SQL不喜欢;所以这目前无效。

SELECT *
FROM DataPoints
WHERE (((DataPoints.[WorkOrder])=[WO2]) AND ((DataPoints.[RunNumber])=6) AND ((DataPoints.[Row]=1)

有一次我想出那个部分....

然后,如果只有一个条目具有指定的WorkOrder,RunNumber和Row,那么我想要将其过滤掉。 (它在刮刮部分不需要,因为它的数据已写入我报告的主要部分)

如果有2个或更多条目具有所述标准(WO,RN和Row),那么我想基于RunDate和RunTime过滤掉最新的条目,并且只保留所有旧条目。

例如,在下面的剪辑中。我的过滤查询中剩余的唯一项目将是时间戳为11:47:00 AM的顶部条目。

.

是否有任何推荐的命令来完成此问题?任何想法都有帮助。谢谢。

sql ms-access
2个回答
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子句中的相关子查询找到具有相同workorderrunnumberrow的记录,但是后来的rundate或相同的rundate和后来的runtime,则主查询返回记录。


0
投票

在代码片段的末尾还需要两个以上的内容。或者您可以在此示例中完全删除括号,MS Access会在其认为必要时将其重新添加。

女士。 Access SQL可能很棘手,因为它不符合标准,也不允许超复杂的查询,或者它需要一个丑陋的工作,比如在尝试连接两个以上的表时使用括号嵌套噩梦。

出于这些原因,我建议使用多个Access查询来生成结果。

© www.soinside.com 2019 - 2024. All rights reserved.