Sql 查询-如果多个记录ID(非主键)匹配,请使用更晚的日期或更大的主键
我构建了一个MS Access数据库,它通过调查来创建自定义报告。使用的调查应用程序没有提供我们需要的报告。我通常抓取excel中的数据,并将其导入access,然后按照我们需要的方式生成报告 这是第一次,我们让人们重做调查,因为他们正在更新某些内容或忘记添加某些内容。我需要能够获取最新的调查数据,这样我们在运行报告时就不会得到重复的数据。我的主报告由几个子报告组成。如果为空,则某些子报表将不可见,并且隐藏并缩小未回答的任何问题,以防止出现带有不必要空格的庞大报表Sql 查询-如果多个记录ID(非主键)匹配,请使用更晚的日期或更大的主键,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我构建了一个MS Access数据库,它通过调查来创建自定义报告。使用的调查应用程序没有提供我们需要的报告。我通常抓取excel中的数据,并将其导入access,然后按照我们需要的方式生成报告 这是第一次,我们让人们重做调查,因为他们正在更新某些内容或忘记添加某些内容。我需要能够获取最新的调查数据,这样我们在运行报告时就不会得到重复的数据。我的主报告由几个子报告组成。如果为空,则某些子报表将不可见,并且隐藏并缩小未回答的任何问题,以防止出现带有不必要空格的庞大报表 record ID (PK)
record ID (PK) | FName | LName | IDNum | Completed
1 | Bob | Smith | 57 | 3/31/2013 5:00pm
2 | Bob | Smith | 57 | 3/31/2013 7:00pm
我想要记录ID 2或在晚上7点完成的记录
查询和报告已经完成,因此我一直在尝试在查询的条件行中添加一行代码,以便在IDnum与多个记录匹配时获取最新的记录
在过去的几个小时里,我一直在努力寻找最好的方法。我不认为将我的表修改为“无重复表”,因为在数据库完成后,技术水平较低的人会使用它。他们所要做的就是导入一个新的excel文件来覆盖表,而查询则完成构建报告的所有工作。我也不想手动删除重复记录
我知道我需要和你一起做一些事情
IIF(count(IDNum)>1, *something, *something)
*我被真假的部分卡住了。我如何告诉access它需要再次在表中检查以查找主键较大的记录
我以为这很容易,但我想我错了。哈哈
我是微软Access的新手,所以我知道我没有充分发挥自己的潜力,我可能从错误的角度出发。如有任何建议,将不胜感激。
我是一名信息系统专业的学生,因此我非常想学习如何做到这一点。我相信您正在寻找的查询是
SELECT t1.*
FROM YourTable t1 INNER JOIN
(SELECT IDNum, MAX(Completed) AS MaxOfCompleted
FROM YourTable GROUP BY IDNum
) t2
ON t1.IDNum = t2.IDNum AND t1.Completed = t2.MaxOfCompleted;
当您使用if函数时,它应该是iif而不是iff。我建议使用相关子查询,例如:
SELECT
Data.RecordID
, Data.FName
, Data.LName
, Data.IDNum
, Data.Completed
FROM
Data
WHERE
Data.Completed IN
(
SELECT TOP 1
DataSQ.Completed
FROM
Data as DataSQ
WHERE
DataSQ.IDNum = Data.IDNum
GROUP BY
DataSQ.Completed
ORDER BY
DataSQ.Completed DESC
)
GROUP BY
Data.RecordID
, Data.FName
, Data.LName
, Data.IDNum
, Data.Completed
;
解释
您可以在主查询的WHERE子句中嵌入另一个SELECT查询,而不是使用Max或IIF之类的函数。嵌套查询用于确定每个IDNum的最近完成日期。与使用SELECT TOP 1+ORDER BY直接从表中选择最新的调查不同,SELECT TOP 1+ORDER BY只返回一条记录,嵌套查询中的WHERE子句引用回主查询并为每个IDNum生成结果。这就是所谓的每组前N个模式,我发现它非常有用。请注意,在嵌套查询中,需要使用表名别名,以便Access能够区分这两个查询
另外,我通常建议不要尝试使用表PK来执行排序。在很多情况下,主键顺序值不是相关字段值的良好指示器
这段代码在虚拟数据上测试时有效-祝你好运 这正是我所需要的。我不知道我可以在access中这样指定我的表。因为它是SQL,所以很有意义。非常感谢