下部で更新します。
私は、レコードごとに、それとそれ以降に発生する他のすべてのレコードを返す自己外部結合を実行しようとしています。それ自体が最新のレコードである場合はNULLを返します。これは私のSQLコードです:
SELECT A.[CR#], A.REGIS_STATUSDATE, B.REGIS_STATUSDATE
FROM CR_ADMIN_REGIS_STATUS A LEFT OUTER JOIN CR_ADMIN_REGIS_STATUS B
ON A.[CR#]=B.[CR#] AND A.REGIS_STATUSDATE < B.REGIS_STATUSDATE
私の問題は、特定の[CR#]について、A.REGIS_STATUSDATEが最大である場合(したがって、B.REGIS_STATUSDATEをそれより大きくすることはできない)、その行が結果に含まれないことです。
たとえば、CR_ADMIN_REGIS_STATUSが次のようになっている場合:
CR# REGIS_STATUSDATE
1 5/1/12
1 5/2/12
1 5/3/12
2 5/1/12
2 5/2/12
クエリの結果は次のようになると思います
CR# A.REGIS_STATUSDATE B.REGIS_STATUSDATE
1 5/1/12 5/2/12
1 5/1/12 5/3/12
1 5/2/12 5/3/12
1 5/3/12 NULL
2 5/1/12 5/2/12
2 5/2/12 NULL
代わりに私はこれを取得します:
CR# A.REGIS_STATUSDATE B.REGIS_STATUSDATE
1 5/1/12 5/2/12
1 5/1/12 5/3/12
1 5/2/12 5/3/12
2 5/1/12 5/2/12
クエリがLEFTOUTERJOINであり、WHERE句がない場合、元のテーブルのすべての行が結果に含まれると予想されますが、そうではありません。ここで何が欠けていますか?
編集:これはAccess2007にあります
更新:テーブルCR_ADMIN_REGIS_STATUSのセクションを別のテーブルにコピーし、それに対してクエリを実行するとどうなるかを確認することにしました。テーブル全体を(手動で)新しいテーブルにコピーしたばかりの場合でも、クエリは機能しました。これは、実際にコピーして貼り付ける場合にのみ当てはまりましたが、SELECT * INTOを別のテーブルに入れると、問題が解決しませんでした。
やがて私は、
SELECT *
FROM CR_ADMIN_REGIS_STATUS
UNION ALL SELECT TOP 1 *
FROM CR_ADMIN_REGIS_STATUS;
CR_ADMIN_REGIS_STATUS自体ではなく、クエリが目的の結果を返しました。変。最初から機能していた同様のテーブルに対しても同様のクエリがあったので、これはこの1つのテーブルに限定された問題だったようです。