2016-10-04 61 views
0

我有這樣MySQL查詢 - 要顯示的唯一條目僅

create table events 
(
    sensor_id integer not null, 
    event_type integer not null, 
    value integer not null, 
    time timestamp unique not null 
); 

表我想是展現獨特的條目,並採取具有最長時間的條目,我寫了這個查詢

SELECT B.* 
FROM events AS B 
RIGHT JOIN (SELECT DISTINCT sensor_id, event_type, MAX(time) AS MaxDateTime 
      FROM events 
      GROUP BY sensor_id, event_type 
      ORDER BY MAxDateTime DESC) A ON B.time = A.MaxDateTime 

我想要的是跳過時間列,只顯示最終結果中的sensor_id,event_type和值,有什麼想法?

+4

變化'灣*''到B.sensor_ID,B.event_Type,B.Value' – xQbert

+0

但後來怎麼樣B.time = A.MaxDateTime? – mohsinali1317

+1

這就是加入批評。我想你會想加入,sensor_Id和event_Type ......時間將不會顯示,只有選擇內容會是什麼。 – xQbert

回答

1
  • 變化B. *在你的輸出所需的列...
  • 訂貨子查詢中沒有」任何意義,所以我把它移到外(注意,您仍然可以爲了通過這不是顯示的列!)
  • 我添加的聯接條件,包括傳感器和EVENT_TYPE

SELECT B.sensor_ID, B.event_Type, B.Value 
FROM events AS B 
RIGHT JOIN (SELECT distinct sensor_id, event_type, max(time) AS MaxDateTime 
      FROM events 
      GROUP BY sensor_id, event_type) A 
    on B.time = A.MaxDateTime 
and B.Sensor_ID = A.Sensor_ID 
and B.Event_Type = A.Event_Type 
ORDER BY B.Time 
1

如果你想每sensor_id一行的最大時間,則是這樣的:

select e.* 
from events e 
where e.time = (select max(e2.time) 
       from events e2 
       where e2.sensor_id = e.sensor_id 
       ); 

編輯:

如果你想每個傳感器和事件最大,然後包括在相關條款:

select e.* 
from events e 
where e.time = (select max(e2.time) 
       from events e2 
       where e2.sensor_id = e.sensor_id and 
         e2.event_type = e.event_type 
       ); 
+0

我認爲你需要在子分配器上增加一些聯合:'e2.event_Type = E.Event_Type'。似乎他們想要每個傳感器和事件的最大值。 – xQbert