MySQL查找每个区域的最新状态

时间:2014-07-08 19:16:47

标签: mysql sql

这是一个类似的问题:SQL query to find status of the last event of an order

我试着玩最好的答案,但由于只有一张桌子,我没有到达任何地方。

基本上我正在寻找三个查询,这些查询可以在一个区域中找到一个人的最新状态,一个区域中的所有人员或所有区域中的一个人员。

所以这是我的表:

TblStatus

ID (PK)
AreaID
PersonID
Timestamp
Status

这是输入数据:

 ID AreaID PersonID   Timestamp       Status  
 1    1       1 2014-07-08 20:41:00      1
 2    1       2 2014-07-08 20:42:00      1
 3    1       1 2014-07-08 20:43:00      2
 4    1       1 2014-07-08 20:44:00      3
 5    2       3 2014-07-08 20:45:00      1
 6    2       3 2014-07-08 20:46:00      2
 7    1       2 2014-07-08 20:47:00      2
 8    2       1 2014-07-08 20:48:00      1

如果AreaID = 1且PersonID = 1,我希望第一个查询的结果如下所示

 AreaID PersonID   Timestamp       Status   
   1       1 2014-07-08 20:44:00      3

如果AreaID = 1

,我希望第二个查询的结果如下所示
 AreaID PersonID   Timestamp       Status 
   1       1 2014-07-08 20:44:00      3
   1       2 2014-07-08 20:47:00      2

如果PersonID = 1

,我希望第三个查询的结果如下所示
 AreaID PersonID   Timestamp       Status  
   1       1 2014-07-08 20:44:00      3
   2       1 2014-07-08 20:48:00      1

我很感激任何有用的帮助。感谢。

2 个答案:

答案 0 :(得分:1)

假设你控制'你的where子句'

Select S.AreaID, S.PersonID, S.TimeStamp, S.Status
from tblStatus S
where timestamp = (
  Select max(timestamp) 
  from TblStatus B 
  where S.PersonID = B.PersonID
  --you need to duplicate the 'your where clauses' here too...
  )
And 'your where clauses'

- 如果不知道表上的密钥,这很有挑战性,但是这种方法可以防止where子句重复

Select S.AreaID, S.PersonID, S.TimeStamp, S.Status
from tblStatus S
where timestamp = (
  Select max(timestamp) 
  from TblStatus B 
  where S.PersonID = B.PersonID
  and S.AreaID = B.AreaID
  )
And 'your where clauses'

答案 1 :(得分:0)

第一次查询

Select * from `TblStatus` where `AreaID` = 1 and `PersonID` = 1 order by `ID` DESC

第二次查询

Select * from `TblStatus` where `AreaID` = 1  order by `ID` DESC

第三次查询

Select * from `TblStatus` where `PersonID` = 1 order by `ID` DESC