这是一个类似的问题: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
我很感激任何有用的帮助。感谢。
答案 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