6

以下の 4 列のデータを提供するテーブルが必要だとしますが、「日付」列を使用して一意の「ID」ごとに 1 つの行のみが必要であり、一意の「ID」ごとに最新の日付のみを選択するとします。

|--ID--|-Type-|-Code-|--Date--|
|   1  |   A  |  11  |11/07/13|
|   2  |   A  |  11  |11/07/13|
|   2  |   B  |  12  |10/07/13|   <-- don't want this record from ID=2 as
|   3  |   A  |  11  |11/07/13|       there is a more recent date for it
|   4  |   A  |  10  |11/07/13|       than 10/07/2013
|   5  |   A  |  11  |11/07/13|

同様の質問に対するものと思われるこの回答を適応させようとしましたが、次のエラーが発生しています。

クエリには、指定された式「ID」が集計関数の一部として含まれていません

Access で実行しようとしていた SQL の適応バージョンを次に示します。

SELECT ESM.ID, ESM.Type, ESM.Code, ESM.Date
FROM Emp_Stat_Mon As ESM
INNER JOIN
    (
    SELECT ID, MAX(Date) AS MaxDate
    FROM Emp_Stat_Mon
    GROUP BY ID
    ) groupedESM ON ESM.ID = groupedESM.ID AND ESM.Date = groupedESM.MaxDate;
4

2 に答える 2

8

これはそれを行います:

SELECT  ID, Type, Code, Date
FROM Emp_Stat_Mon t1
WHERE t1.Date = 
    (SELECT Max(t2.Date) 
     FROM Emp_Stat_Mon t2 
     WHERE t2.ID=t1.ID 
     GROUP BY t2.ID)

サンプル データを含む SQLFiddle : SQLFiddle

于 2013-07-11T12:03:02.403 に答える
0

同様のことを機能させる必要がありました。以前DMax()はそこにたどり着きましたが、本質的には Ron のコードと同じことを行います。

SELECT ID, Type, Code, Date
FROM Emp_Stat_Mon As ESM
WHERE ESM.Date = DMax("Date", "Emp_Stat_Mon", "ID=" & ESM.ID);

編集:

これを組み立てていたので、パフォーマンスが心配でした。私は自分のテーブルが大きくなると予想しているので、この方法はおそらく避けるべきです。ここで良い議論があったと思いました。2 番目の SELECT を機能させるのに苦労しましたが、2 度目のチャンスに値すると思います。

于 2014-02-10T19:24:05.700 に答える