SQL仅为基于不同列的每个“项”获取一条记录

SQL仅为基于不同列的每个“项”获取一条记录,sql,ms-access,Sql,Ms Access,我已经工作了将近一周,研究这个问题,学习不同的SQL技术。我试图在Microsoft Access的列表框中显示结果。我有SQLIDofLoggers、JobNumber、DateDeployed、DateReturned、AHULocation、AccessPoint和两个组合框cboLoggerType和cboOrderBy来过滤这些结果。我使用VBA解决了cboOrderBy的问题,所以它不在发布的SQL中 我想做的是为每个不同的SQLIDofLogger只提取一条记录。要确定每个SQLI

我已经工作了将近一周,研究这个问题,学习不同的SQL技术。我试图在Microsoft Access的列表框中显示结果。我有SQLIDofLoggers、JobNumber、DateDeployed、DateReturned、AHULocation、AccessPoint和两个组合框cboLoggerType和cboOrderBy来过滤这些结果。我使用VBA解决了cboOrderBy的问题,所以它不在发布的SQL中

我想做的是为每个不同的SQLIDofLogger只提取一条记录。要确定每个SQLIDofLogger的多个记录中的哪一个记录,我想按它们的DateReturn eds排序并选择最新的记录,但我不想显示任何DateReturn为null的记录,即它们仍在工作中

这是我目前使用的SQL,它提供了正确的信息,它只显示每个记录器的多条记录:

SELECT 
    (SELECT TOP 1 tblLoggers.LoggerID FROM tblLoggers WHERE tblLoggers.ID = tblUse.IDofLogger) AS SQLIDofLogger,
    (SELECT TOP 1 tblProjectList.JobNumber FROM tblProjectList WHERE( tblProjectList.ID = tblUse.IDofProject)) AS expr1,
    tblUse.DateDeployed, tblUse.DateReturned, tblUse.AHULocation, tblUse.AccessPoint
FROM tblUse
WHERE (
        (IIf([Forms]![frmByType].[cboLoggerType]<>'(ALL)',
            ((SELECT TOP 1 tblLoggers.LoggerType FROM tblLoggers WHERE tblLoggers.ID = tblUse.IDofLogger ORDER BY ID)=[Forms]![frmByType].[cboLoggerType]),
            '*')<>False
) AND (
        (tblUse.DateReturned) In (SELECT MAX(tblUse.DateReturned) FROM tblUse GROUP BY tblUse.IDofLogger))
)
GROUP BY tblUse.DateDeployed, tblUse.DateReturned, tblUse.AHULocation, tblUse.AccessPoint, tblUse.IDofProject, tblUse.IDofLogger
ORDER BY 1, tblUse.AHULocation;

我试图尽可能地清理这个代码。我知道这不太理想,但我只是不断地添加一些零碎的东西,而且效果很好。我会发布我试图得到的等式的最后一点,但没有一个明显有效,哈哈。我不知道这个组的最佳操作方法是什么,例如,一些连接、存在等等,所以我愿意接受任何建议。

在子查询之前选择一个不同的选项怎么样?@DevN00B它不允许我在IIF子查询中放入一个,所以我将其忽略,但我将其放入其他三个,结果是一样的。然后我试着在IIF子查询中按tblLoggers.LoggerType分组,但它说tblLoggers.ID不是聚合函数blah的一部分。我是说你发布的代码上的第一个选择,所以选择不同的选择前1个tblLoggers…等等…会有帮助吗?@DevN00B这也是我的第一个倾向,但是是和否,因为我的GROUPBY子句本质上是一个DISTINCT by,它对所有字段进行分组。所以已经有了一个明显的结果,它仍然没有返回正确的结果。我已经创建了一个SQLFIDLE来表达这个问题。代码没有运行,但这可能有助于进一步讨论。