1个回答
展开全部
如果支持子查询的话:
Select s.* From 设备数据表 as s
Inner Join
(Select 设备名称或者id,LastTime=Max(创建时间) From 设备数据表 Group By 设备名称或者id) as r
On s.设备名称或者id =r.设备名称或者id And s.创建时间=r.LastTime
如果情况复杂请给出表结构,并追问
Select s.* From 设备数据表 as s
Inner Join
(Select 设备名称或者id,LastTime=Max(创建时间) From 设备数据表 Group By 设备名称或者id) as r
On s.设备名称或者id =r.设备名称或者id And s.创建时间=r.LastTime
如果情况复杂请给出表结构,并追问
追问
情况不复杂 ,只是还看不懂你给的。我的查询一个设备的语句:$q = "SELECT OTH_OTHID, OTH_OILTANKNO, OTH_OILWEIGHT FROM LiquidLevelTemperatureInformation WHERE OTH_OILTANKNO='T11410181-2' ORDER BY OTH_OTHID DESC";
追答
语句不复杂,就是个子查询加表连接
先通过分组取得每个设备的最后一条数据(最大值):
Select OTH_OILTANKNO ,OTH_OTHID=Max(OTH_OTHID) From LiquidLevelTemperatureInformation Group By OTH_OILTANKNO
然后再用原表来连接这个结果,以这个结果数据作为条件
如果一条一条的找 就相当于
SELECT OTH_OTHID, OTH_OILTANKNO, OTH_OILWEIGHT FROM LiquidLevelTemperatureInformation WHERE OTH_OILTANKNO='T11410181-2' And OTH_OTHID =@maxId
步骤1:
Declare @maxId varchar(50)
SELECT top 1 @maxId =OTH_OTHID FROM LiquidLevelTemperatureInformation WHERE OTH_OILTANKNO='T11410181-2' ORDER BY OTH_OTHID DESC
步骤2:
SELECT OTH_OTHID, OTH_OILTANKNO, OTH_OILWEIGHT FROM LiquidLevelTemperatureInformation WHERE OTH_OILTANKNO='T11410181-2 And OTH_OTHID =@maxId
但,因为你需要批量一次性处理完,所以得用表连接,以结果集来匹配,最终结果是:
Select s.OTH_OTHID, s.OTH_OILTANKNO,s.OTH_OILWEIGHT From LiquidLevelTemperatureInformation as s
Inner Join (Select OTH_OILTANKNO ,OTH_OTHID=Max(OTH_OTHID) From LiquidLevelTemperatureInformation Group By OTH_OILTANKNO) as r
On s.OTH_OILTANKNO='T11410181-2' And s.OTH_OILTANKNO=r.OTH_OILTANKNO And s.OTH_OTHID=r.OTH_OTHID
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询