Created_On日付とLast_Updated_On日付のレコードを保存しているテーブルがあります。新しいレコードはそれぞれCreated_Onで書き込まれ、その後の更新はそれぞれ、同じCreated_Onで、ただし更新されたLast_Updated_Onで新しい行を書き込みます。
それぞれの最新の行を返すクエリを設計しようとしています。私が持っているものは次のようになります:
SELECT
t1.[id] as id,
t1.[Store_Number] as storeNumber,
t1.[Date_Of_Inventory] as dateOfInventory,
t1.[Created_On] as createdOn,
t1.[Last_Updated_On] as lastUpdatedOn
FROM [UserData].[dbo].[StoreResponses] t1
JOIN (
SELECT
[Store_Number],
[Date_Of_Inventory],
MAX([Created_On]) co,
MAX([Last_Updated_On]) luo
FROM [UserData].[dbo].[StoreResponses]
GROUP BY [Store_Number],[Date_Of_Inventory]) t2
ON
t1.[Store_Number] = t2.[Store_Number]
AND t1.[Created_On] = t2.co
AND t1.[Last_Updated_On] = t2.luo
AND t1.[Date_Of_Inventory] = t2.[Date_Of_Inventory]
WHERE t1.[Store_Number] = 123
ORDER BY t1.[Created_On] ASC
副選択は正常に機能します...Store_NumberとDate_Of_Inventoryでグループ化されたX行が表示され、そのうちのいくつかはnullのluo(Last_Updated_On)値を持っています。ただし、luoがnullである副選択の行は、全体の結果には表示されません。つまり、副選択で6つの結果が得られた場合、全体の結果では2つしか得られず、Last_Updated_OnがNULLでない行のみが得られます。
それで、テストとして、私は次のように書きました:
SELECT 1 WHERE NULL = NULL
結果は得られませんでしたが、実行すると:
SELECT 1 WHERE 1 = 1
1の結果が返されます。SQLServerがNULLをNULLに関連付けていないかのようです。
どうすればこれを修正できますか?両方の値がNULLの場合、2つのフィールドが比較されないのはなぜですか?