MS-Access:查找具有多个匹配条件的记录

时间:2016-09-11 19:01:49

标签: vba ms-access

我在旅途中学习,非常感谢你能给我的任何帮助。 我需要在“问题日志”表中计算记录的首次出现。

每周一次将原始数据添加到表中。如果下一次运行解决了问题,它将被省略,但如果问题仍然存在,则会在表中附加新记录。

我需要在问题首次出现时填充新列。挑战在于,如果在前一次运行中省略了记录,则计数器“重置”。

table example - 每周添加一次记录(可以在不同的日期进行),如果某些字段(在本例中为“country”和“material”)之间存在匹配,则记录为重复记录需要填充的列是“第一个外观”列。

任何帮助表示赞赏! :)

编辑 - 只是为了澄清,我不是在寻找一个代码,只是一个关于如何解决这个问题的想法。我正在考虑将上一个报告的日期添加为附加列,其中VB计算每个连续的外观,但似乎可能有一个更简单的解决方案。欢迎任何想法,谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的屏幕截图是Access表格(表1)的表示,那么您需要选择 MIN 每个 GROUP 的最终日期国家和地区材料字段 FROM 表1。

尝试:

SELECT      MIN(dDate) AS First_Appearance,
            Country,
            Material
FROM        Table1
GROUP BY    Country,
            Material
ORDER BY    MIN(dDate)

修改
根据您的示例数据,您应该只显示罗马尼亚乌克兰以色列,其中包含材料 C ,因为这些是仅显示最近一周(2016年9月11日)的记录。

以色列只出现一次,因此日期是它的第一次出现 罗马尼亚出现在11日和28日。因为它没有出现在4号,所以11号是它的第一次亮相 乌克兰出现在11日和4日,所以它的第一次亮相是第4次。

SELECT        T1.dDate
            , T1.Country
            , T1.Material
            , MIN(T2.dDate) AS First_Appearance
FROM        Table1 T1 INNER JOIN Table1 T2 ON 
                T1.Country = T2.Country AND
                T1.Material = T2.Material AND
                (T2.dDate + 7 = T1.dDate or T2.dDate = T1.dDate)
WHERE       T1.dDate = (SELECT MAX(dDate) FROM Table1)
GROUP BY    T1.Country, T1.Material, T1.dDate
ORDER BY    T1.Country, T1.Material  

如果您要查看前一周(将WHERE子句更改为WHERE T1.dDate = #09/04/2016#),您将获得:

迪拜B 首次亮相第28名 罗马尼亚B 首次亮相第4名 西班牙A ,第一次出现在第28位 Ukraine C 首次亮相第4名。