2016-03-23 80 views
1

我需要选择为特定设备插入的最后8条记录的最大值和最小值。 我有一个名为letture这种结构表:此表上选择插入的最后7条记录的最大值和最小值

ID,id_dispositivo,id_utenza,id_impianto,id_lettura,数据,valore

我做了一个查询,提取最后8个记录id_dispositivo = 1

SELECT valore FROM `letture` WHERE id_dispositivo = 1 ORDER BY id_lettura DESC LIMIT 0,8 

在此查询我需要赶上MAX和MIN的值的结果

+0

你想这个SQL查询或你需要在你用PHP来做到这一点已经得到结果并将其保存为字符串?通过查询获得它会更好,我想这会需要更少的数据管理。 – Martin

+0

只有SQL,也许PHP以后,现在我正在努力与SQL查询 –

回答

3

你需要一个子查询:

SELECT MIN(valore), MAX(valore) 
FROM (SELECT valore 
     FROM `letture` 
     WHERE id_dispositivo = 1 
     ORDER BY id_lettura DESC 
     LIMIT 8 
    ) last8; 
+0

last8是临时表的名称? –

+1

@LucaScalvi。 。 。 'last8'是MySQL中的子查询的别名。 –

3

只需使用一个子查询:

SELECT MIN(valore), MAX(valore) FROM (
    SELECT valore 
    FROM `letture` 
    WHERE id_dispositivo = 1 ORDER BY id_lettura DESC LIMIT 0,8 
) T1; 
+0

T1是临时表的名称?你的回答是正确的,但我标记了另一个,因为他先回答了。谢谢 –

+1

'T1'是别名:每个子查询必须有一个别名。 –

0

---针对SQL Server 2008

Create Table Testing(TestID Integer Primary Key,Price Float); 
Insert Into Testing Values (1,12.00); 
Insert Into Testing Values (2,15.00); 
Insert Into Testing Values (3,20.00); 
Insert Into Testing Values (4,13.00); 
Insert Into Testing Values (5,11.00); 
Insert Into Testing Values (6,12.00); 
Insert Into Testing Values (7,17.00); 
Insert Into Testing Values (8,18.00); 
Insert Into Testing Values (9,19.00); 
Insert Into Testing Values (10,22.00); 

Create Function dbo.GetMinID(@MaxId Integer,@NoOfRows Integer) Returns Integer 
as 
Begin 
    Declare @MinMax Integer 
    IF @NoOfRows > 1 
    Set @MinMax=dbo.GetMinID((Select MAX(TestID) From Testing where TestID <@MaxId),@NoOfRows-1) 
    else 
    Set @MinMax=(Select MAX(TestID) From Testing where TestID < @MaxId);     
    Return @MinMax; 
End 

Select R.TestID,dbo.GetMinID(R.TestID,8) as MinMax From (Select MAX(TestID) TestID 
From Testing) R