我有一个表,我在其中存储具有 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
子选择工作正常...我看到 X 行,按 Store_Number 和 Date_Of_Inventory 分组,其中一些的 luo (Last_Updated_On) 值为 NULL。但是,子选择中 luo 为空的那些行不会出现在整体结果中。换句话说,我在子选择中得到 6 个结果,我在整体结果中只得到 2 个,而且只有 Last_Updated_On 不为 NULL 的那些行。
因此,作为测试,我写了以下内容:
SELECT 1 WHERE NULL = NULL
并没有得到任何结果,但是,当我运行时:
SELECT 1 WHERE 1 = 1
我得到了 1 的结果。好像 SQL Server 没有将 NULL 与 NULL 相关联。
我怎样才能解决这个问题?当两个值都为 NULL 时,为什么两个字段不进行比较?