私はこの質問を調査し、さまざまな SQL 手法を学ぶためにほぼ 1 週間働きました。Microsoft Access のリストボックスに結果を表示しようとしています。これらの結果をフィルタリングするための列SQLIDofLoggers, JobNumber, DateDeployed, DateReturned, AHULocation, AccessPoint
と 2 つのコンボボックスがあります ( VBA を使用して回避策を実行したため、投稿された SQL には含まれていません)。cboLoggerType and cboOrderBy
cboOrderBy
私がやりたいことは、それぞれの個別のレコードを 1 つだけプルすることですSQLIDofLogger
。それぞれのいくつかのレコードの中からその1つのレコードを決定する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;
このコードを可能な限りクリーンアップしようとしました。理想的ではないことはわかっていますが、少しずつ追加し続けたところ、「機能」しました。方程式の最後の部分を取得しようとしたものを投稿しますが、どれも機能しません (明らかに笑)。GROUP BY
これに対する最善の行動方針( 、一部JOIN
、など)がわからないので、EXISTS
どんな提案も受け付けています。