2016-03-23 81 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