我正在创建两个表 一个有温度传感器列表(包括最后一个测量值) 另一个具有每个测量的历史值
表的定义如下:
CREATE TABLE [dbo].[History](
[SensorID] [int] NOT NULL,
[TimeStamp] [datetime] NOT NULL,
[Temperature] [float] NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Sensors](
[SensorID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL
) ON [PRIMARY]
传感器表还应该有Temperature
列来存储最后一个值,但我忘记添加它,这就是我发现这种奇怪行为的方式
我想获得最后一个值最低的5个传感器的历史数据。
SELECT *
FROM History
WHERE SensorID IN (SELECT TOP 5 SensorID FROM Sensors ORDER BY Temperature)
这里的问题是查询有效并返回结果(probalby不正确),但是:
Sensors
表不包含Temperature
列。如果我单独运行它会按预期失败。 ORDEr BY的文档指出,该列必须在SELECT或FROM表中定义。 - http://technet.microsoft.com/en-us/library/ms188385.aspx 我知道我可以通过使用别名轻松修复它。这将使我的查询失败,因为我想要。这里的问题是,这是SQL Server / Query优化器中的某种错误吗?
在SQL Server 11.0.3128上测试 注意:SQL Management Studio intellisense在编写ORDER BY clausule
时也提供Temperature列