我是SQL新手,但我很确定这里发生了一些奇怪的事情。我有一个带有表(eventtable)的MySQL数据库,有4列(RoomNum,EventName,EventStatus,EventDateTime)。
某些EventNames重复,EventStatus在不同时间切换为ON和OFF。我试图获得最新的条目,以便我拥有"当前"州,所以我用:
select RoomNum, EventName, EventStatus, max(EventDateTime) as MaxDate
from eventtable where eventName = "DND"
group by RoomNum
导致:
为了确保一切正常,我会检查每个房间以确保它提供最新的房间:
SELECT * FROM `eventtable`
where RoomNum = "070#" and eventname = "DND" /*where "#" is a specific digit*/
order by eventdatetime asc
第一个看起来不错:
但其他人不要! (即使时间正确,EventStatus也是错误的):
我没有得到的是EventDateTime匹配,它告诉我我正在查看同一行数据,但那么内部值(EventStatus)如何不同?
请帮忙。谢谢。
答案 0 :(得分:1)
这就是firebird不允许这样做的原因。只有这个是有效的
select RoomNum, max(EventDateTime) as MaxDate
from eventtable where eventName = "DND"
group by RoomNum
EventName
和EventStatus
值是任意的。你还没告诉它你想要哪一个。我认为你不能。由于RoomNumn
而隐含"group by"
。
要获取所需的数据,一种方法是使用max(EventDateTime)
返回引用的子选择。
答案 1 :(得分:1)
通过使用以下查询,您可以根据您的要求获得结果。请试试。
select * from(选择RoomNum,EventName,EventStatus,EventDateTime from eventtable where eventName =“DND”order by EventDateTime desc)tabg by RoomNum;