私の質問とその背後にあるデータについては、Microsoft Access SQLは、グループ化されたレコードのセットの最後のレコードが別の列のものと等しいレコードのみを返します。
Microsoft Accessには、次のような構造のテーブルがあります。
ID1、ID2、データ1、データ2
ID1 - 項目(1,2,3,4など)
ID2を識別する番号フィールドですが - その識別番号フィールドですその項目への変更(1,2,3,4など...) これらはどちらも主キーに設定されています。両方のIDはレコードが一意であるために必要です。
データ1 - 同じこと、単にデータフィールド -
Data2の(変更を行ったユーザーの名前)の変更に関する情報を含むデータフィールド。
このデータのSQLクエリを実行して、ID1 = 1とし、ID2 =そのセットの最新レコードのData1の特定のアイテムのすべてのレコードを返す必要があります。
ID2は、最後の行の内容が異なる場合があります。したがって、ID1が1の場合、そのID1に対して7つのID2が存在する可能性があります。そのため、確認する必要があるのは7です。 ID1が2の場合、3つの項目があるので、ID1 = 1の行7とID1 = 2の行3の両方をチェックして、その行のData1が特定の名前に等しいかどうかを調べるSQLが必要です。
私が研究したことから、ID1をまとめてグループ化する必要があるようですが、私が探しているものが見つかりませんでしたID1の各グループのID2。
これまでのところ私はここにいます。
SELECT ID1, Max(ID2), Data1, Data2
FROM tbl_History
WHERE Data1 = 'name'
GROUP BY ID1
ORDER BY ID2 DESC
例データ:
ID1 | ID2 | Data1 | Data2
--------------------------------
1 1 Name1 32
1 2 Name2 23
1 3 Name3 63
1 4 Name2 53
2 1 Name4 12
2 2 Name5 16
2 3 Name2 71
期待される結果は、私がデータ1からname2の見れば、私は行1-4と2-3の両方を取得することです。この例でName5または2以外の他の名前を検索すると、最大ID2がなくData1列の名前があるため行がありません。
エラーが返されるのは、Data2が集計関数の一部ではないということです。私は技術的に既にData1を持っていますので、返されるデータから取り除くことができますが、私の上記の要件に基づいてData2をどのように取得できますか?多分グルーピングは私が行く必要がある方法ではありません。
私は、VB.NETを使用して、OleDb接続を介してMicrosoft Accessデータベースにアクセスしています。
ご協力いただければ幸いです。詳細が必要な場合はお知らせください。投稿していただければ幸いです。
ルールによって一般GROUPは言う:GROUP BY句が指定されている場合、SELECTリスト内の各列の基準は、グループ化カラムを同定またはなければならないのいずれかでセット関数の引数! – jarlh
大丈夫ですが、Data2から日付、テキスト、数字などのデータを取得するにはどのような関数を使用しますか。これがグループ化が行く方法ではないように感じる理由です。 –
サンプルテーブルのデータと予想される結果を追加します。 (フォーマットされたテキストと同様に) – jarlh