私はこのSQLを持っています:
SELECT a.ID,
a.title,
a.section,
a.name,
l.User AS CreatedBy,
IIf(IsNull(l.Time),
Null, DateAdd ( "s", l.time, #03/01/1980# )) AS CreatedAt
FROM (
Reports AS a
LEFT JOIN AuditLog AS l ON a.ID = l.ID
)
LEFT JOIN
(SELECT TOP 1 Min([time]) AS Mintime,
URN FROM AuditLog GROUP BY ID)
AS t ON (l.time = t.mintime) AND (l.ID = t.ID)
WHERE a.Active = 'Y';
クエリは機能しますが、重複するレコードを返します(1つのレポートに複数の監査ログがあるため)。私はこれがID
最も早い監査時間を示す1つのレコード(つまり、何mintime
であるか)を返すことだけを望みます。追加しましたTOP 1
が、何も変わらないようです。私も検討しましたが、それらが集約されていないことについて不平を言っているので、GROUP BY ID
まだ表示する方法などについて少し混乱しています。title
現在の出力:
ID title section CreatedBy CreatedAt
Z.test1 Example 1 Ex User1 01/01/2012
Z.test5 Example 5 Ex User2 02/03/2012
Z.test6 Example 6 Ex User3 03/06/2012
Z.test6 Example 6 Ex User4 02/01/2000
期待される出力:
ID title section CreatedBy CreatedAt
Z.test1 Example 1 Ex User1 01/01/2012
Z.test5 Example 5 Ex User2 02/03/2012
Z.test6 Example 6 Ex User4 02/01/2000
上に示したように、Z.test6の最も古いレコードのみが表示され、すべての結果が表示されるわけではありません。
新しいクエリを試行しました:
SELECT a.ID, a.title, a.section, a.name, l.User AS CreatedBy, IIf(IsNull(l.Time), Null, DateAdd ( "s", l.time, #03/01/1980# )) AS CreatedAt
FROM (
Reports AS a
LEFT JOIN (
SELECT ID, Min([time]) AS Mintime FROM AuditLog GROUP BY ID
) AS t ON (l.ID = t.ID)
LEFT JOIN AuditLog AS l ON (a.ID = l.ID AND t.mintime = l.time)
)
WHERE a.Active = 'Y'