我正在使用SQL Server Compact 4.0,并且当另一列Alarm
为Cleared
时,我尝试根据最大标识获取一个查询以返回包含列NULL
的单个记录。
这有效:
SELECT Id, Alarm
FROM Alarm_History
WHERE Cleared IS NULL
给我一半答案。问题是它返回了几条记录。
这也有效:
SELECT MAX(Id)
FROM Alarm_History
WHERE Cleared IS NULL
它给了我答案的另一半,但我无法获得价值"警报"我正在寻找。
但他们不会像以下那样一起工作:
SELECT Id, Alarm
FROM Alarm_History
WHERE Cleared IS NULL AND Id = MAX(Id)
OR
SELECT MAX(Id), Alarm
FROM Alarm_History
WHERE Cleared IS NULL
通过上面的查询,我可以连续两次查询以获得结果,但我不认为这非常有效。有没有办法在一次数据库之旅中这样做?
由于 杰夫
答案 0 :(得分:1)
不要想“最大”。想想“按顺序”。试试这个:
SELECT TOP 1 Id, Alarm
FROM Alarm_History
WHERE Cleared IS NULL
ORDER BY Id DESC;
这样,您就可以获得与最大ID相关联的所有字段。
答案 1 :(得分:1)
你可以用max和join来做,但这太复杂了。相反,你可以尝试:
SELECT TOP 1 Id, Alarm
FROM Alarm_History
WHERE Cleared IS NULL
ORDER BY Id DESC
注意:如果两个警报有最大ID,会发生什么?嗯,这不应该发生(Id是独一无二的)。但这仍然是一个有趣的问题(假设该字段不是Id而是Price,并且您希望所有警报都具有最高价格,并且您不知道有多少警报,因此您不能再使用TOP 1)。 你必须使用CROSS JOIN;
SELECT Id, Price
FROM Alarms
JOIN (SELECT MAX(Price) as maxPrice FROM Alarms) b
WHERE Alarms.Price = b.maxPrice
答案 2 :(得分:0)
尝试,
SELECT Id, Alarm FROM Alarm_History WHERE ID in (SELECT MAX(Id) FROM Alarm_History WHERE Cleared IS NULL)