Sql 组合多个复杂的SELECT语句,使它们显示在一行上
我是SQL的新手,所以请温柔一点。我有一个表格,记录了不同地点不同传感器的温度。如果数据库结构更简单的话,我很乐意重新调整它 列为:ID int、SensorID tinyint、LocationID tinyint、TempReadDT datetime、Temp(十进制4,1) 传感器每隔几分钟记录一次读数,我希望有一个存储过程来获取以下信息,并显示在摘要页面上:Sql 组合多个复杂的SELECT语句,使它们显示在一行上,sql,sql-server,Sql,Sql Server,我是SQL的新手,所以请温柔一点。我有一个表格,记录了不同地点不同传感器的温度。如果数据库结构更简单的话,我很乐意重新调整它 列为:ID int、SensorID tinyint、LocationID tinyint、TempReadDT datetime、Temp(十进制4,1) 传感器每隔几分钟记录一次读数,我希望有一个存储过程来获取以下信息,并显示在摘要页面上: 当前室内温度(传感器1的最新读数) 当前室外温度(传感器2的最新读数) 过去24小时的平均室内温度 过去7天的平均室内温度 上次
SELECT
语句(如下),但我不确定如何将它们组合到一个查询中,以便在一行上返回数据
SELECT TOP 1 Temp AS "intTemp"
FROM Temperature
WHERE SensorID = 1
ORDER BY ID DESC
SELECT TOP 1 Temp AS "extTemp"
FROM Temperature
WHERE SensorID = 2
ORDER BY ID DESC
SELECT AVG(Temp) AS "avgTemp24h"
FROM Temperature
WHERE SensorID = 1
AND TempReadDT >= DATEADD(DAY,-1, SYSDATETIME())
SELECT AVG(Temp) AS "avgTemp7d"
FROM Temperature
WHERE SensorID = 1
AND TempReadDT >= DATEADD(DAY,-7, SYSDATETIME())
SELECT MAX(TempReadDT)
FROM Temperature
我讨厌交叉连接,但是
Select * from
(SELECT TOP 1 Temp AS "intTemp"
FROM Temperature
WHERE SensorID = 1
ORDER BY ID DESC
) A
cross join
(SELECT TOP 1 Temp AS "extTemp"
FROM Temperature
WHERE SensorID = 2
ORDER BY ID DESC
)B
cross join
(
SELECT AVG(Temp) AS "avgTemp24h"
FROM Temperature
WHERE SensorID = 1
AND TempReadDT >= DATEADD(DAY,-1, SYSDATETIME())
)C
cross join
(
SELECT AVG(Temp) AS "avgTemp7d"
FROM Temperature
WHERE SensorID = 1
AND TempReadDT >= DATEADD(DAY,-7, SYSDATETIME())
)D
cross join
(
SELECT MAX(TempReadDT)
FROM Temperature) E
应该可以工作。例如,您可以使用子查询和别名作为结果
SELECT
Max(case SensorID when 1 then Temp else null end) AS "intTemp",
Max(case SensorID when 2 then Temp else null end) AS "intTemp",
AVG(case
when SensorID = 1
AND TempReadDT >= DATEADD(DAY,-1, SYSDATETIME())
then Temp else null end) AS "avgTemp24h",
AVG(case
when SensorID = 1
AND TempReadDT >= DATEADD(DAY,-7, SYSDATETIME())
then Temp else null end) AS "avgTemp7d",
MAX(TempReadDT) MaxTemp
FROM Temperature
SELECT t1.col1, t2.col2 from (select * from tbl1) as t1, (select * from tbl2) as t2
如果你展示了原始数据和预期结果,你应该得到更好更快的回答。汉克斯·阿德里安,工作得很好。我将阅读更多关于这个案例的工作原理:)