Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉应用,包括空值_Sql_Sql Server - Fatal编程技术网

Sql 交叉应用,包括空值

Sql 交叉应用,包括空值,sql,sql-server,Sql,Sql Server,我有两张桌子,传感器和传感器校准。在第一部分中,我有一个物理传感器列表。它们需要校准,所以在第二个表中,我保留了有关校准的日期(和其他信息) 因此,对于传感器表中的每一行,我可能在传感器校准中有许多行,代表每次校准传感器的时间 CREATE TABLE Sensors( SensorGUID uniqueidentifier NOT NULL, SerialNumber nvarchar(25) NOT NULL, ModelName nvarchar(25) NOT N

我有两张桌子,传感器和传感器校准。在第一部分中,我有一个物理传感器列表。它们需要校准,所以在第二个表中,我保留了有关校准的日期(和其他信息)

因此,对于传感器表中的每一行,我可能在传感器校准中有许多行,代表每次校准传感器的时间

CREATE TABLE Sensors(
    SensorGUID uniqueidentifier NOT NULL,
    SerialNumber nvarchar(25) NOT NULL,
    ModelName nvarchar(25) NOT NULL,
    SensorAvailable bit NOT NULL,
    SensorType nvarchar(100) NOT NULL,
    DisplayUnits nvarchar(20) NULL,
    LastEdit datetime NOT NULL)

CREATE TABLE SensorCalibrations(
    SensorCalibrationGUID uniqueidentifier NOT NULL,
    SensorGUID uniqueidentifier NOT NULL,
    CalibrationDate datetime NOT NULL,
    Offset float NOT NULL,
    Sensitivity float NOT NULL)
我需要一个查询,该查询将返回每个传感器行以及该传感器的最新SensorCalibarion,通过每个表中的SensorGUID列链接。以下是到目前为止我使用SQL Server 2012的情况:

SELECT s.SerialNumber, c.CalibrationDate
FROM Sensors s
CROSS APPLY (
    SELECT TOP 1 *
    FROM SensorCalibrations c
    WHERE c.SensorGUID = s.SensorGUID
    ORDER BY c.CalibrationDate DESC
) c
ORDER BY c.CalibrationDate DESC
这几乎可以工作,但没有显示未校准的传感器。或者,也就是说,不显示传感器表中的记录,这些记录在传感器校准表中至少没有一条匹配记录。我需要的是返回每个传感器记录及其匹配的最新校准日期,或者,如果没有校准,则返回NULL

有人能建议我如何改变我的查询来实现这一点吗


TIA

使用
外部应用
而不是
交叉
SELECT s.SerialNumber, c.CalibrationDate
FROM Sensors s
OUTER APPLY (
    SELECT TOP 1 *
    FROM SensorCalibrations c
    WHERE c.SensorGUID = s.SensorGUID
    ORDER BY c.CalibrationDate DESC
) c
ORDER BY c.CalibrationDate DESC