同一个表上的两个查询显示具有不同值的同一行?

时间:2015-05-04 02:28:13

标签: mysql

我是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

导致: eventtable_maxtime_DND_partial

为了确保一切正常,我会检查每个房间以确保它提供最新的房间:

SELECT * FROM `eventtable`
where RoomNum = "070#" and eventname = "DND" /*where "#" is a specific digit*/
order by eventdatetime asc

第一个看起来不错: eventtable_701_DND

但其他人不要! (即使时间正确,EventStatus也是错误的):eventtable_702_DND eventtable_703_DND eventtable_704_DND

我没有得到的是EventDateTime匹配,它告诉我我正在查看同一行数据,但那么内部值(EventStatus)如何不同?

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

这就是firebird不允许这样做的原因。只有这个是有效的

select RoomNum, max(EventDateTime) as MaxDate
from eventtable where eventName = "DND"
group by RoomNum

EventNameEventStatus值是任意的。你还没告诉它你想要哪一个。我认为你不能。由于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;