SQL Server CE使用MAX(Id)从记录中检索字段

时间:2014-04-27 18:04:47

标签: sql sql-server-ce

我正在使用SQL Server Compact 4.0,并且当另一列AlarmCleared时,我尝试根据最大标识获取一个查询以返回包含列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

通过上面的查询,我可以连续两次查询以获得结果,但我不认为这非常有效。有没有办法在一次数据库之旅中这样做?

由于 杰夫

3 个答案:

答案 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)