我已经工作了将近一周来研究这个问题并学习不同的 SQL 技术。我正在尝试在 Microsoft Access 的列表框中显示结果。我有列SQLIDofLoggers, JobNumber, DateDeployed, DateReturned, AHULocation, AccessPoint
和两个组合框cboLoggerType and cboOrderBy
来过滤这些结果(我使用 VBA 做了一个解决方法cboOrderBy
,所以这就是它不在发布的 SQL 中的原因)。
我想要做的是只为每个不同的SQLIDofLogger
. 为了确定每个记录中的哪一条记录,SQLIDofLogger
我想通过他们的DateReturn
-eds 对它们进行排序并选择最新的但我不想显示它们DateReturn
为空的任何记录,即它们仍在工作中
这是我目前拥有的 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;
我试图尽可能地清理这段代码。我知道这并不理想,但我只是不断地添加一些零碎的东西,并且它“有效”。我会发布我试图得到等式的最后一点的东西,但它们都不起作用(显然哈哈)。我不知道最好的行动方案(GROUP BY
、 some JOIN
、EXISTS
等),所以我愿意接受任何建议。