2016-06-17 14 views
1

を取得するとのことで、私は3つのテーブルグループのみ最大値

  • マシン(マシンのリスト)
  • マシンのイベントなどのイベント(リスト。イベントID、マシン名を持っています、開始時刻と終了時刻)
  • イベント詳細(指定されたすべてのイベントに関する詳細イベントIDとマシン名による)

すべてのマシンでmaxイベントIDのデータを結合するクエリを実行したいが、グルーピングに問題がある。

表マシン:

machine 
----------- 
Machine 1 
Machine 2 

表イベント:

eventid | machine | start  | stop 
----------------------------------------------- 
     1 | Machine 1 | 2016-06-14 | 2016-06-16 
     2 | Machine 1 | 2016-06-16 | null 
     1 | Machine 2 | 2016-05-30 | null 

表のeventdetails:

eventid | machine | name  | value 
----------------------------------------------- 
     1 | Machine 1 | product | Product 1 
     1 | Machine 1 | person  | Samuel 

私はトンを持っていますried次のクエリは、マシンごとに複数の行を返します...私はマシンでグループ化し、最大イベントIDに応じてデータのみを取得します。

SELECT m.machine, MAX(e.eventid), e.start, e.stop, d.name, d.value 
FROM machine m 
JOIN event e ON e.machine = m.machine 
JOIN eventdetails d ON d.eventid = e.eventid AND d.machine = m.machine 
GROUP BY m.machine, e.start, e.stop, d.name, d.value 

ありがとうございます。

+0

SQL Server?MySQL? – DarkKnight

+0

@SateeshPagolu SQL Server – lingo

答えて

2

これを行ってください。 eventテーブルから同じテーブルのmax(eventid)と等しくないものを抑制する内部結合を行います。

SELECT m.machine, e.eventid, e.start, e.stop, d.name, d.value 
FROM machine m 
INNER JOIN event e ON e.machine = m.machine 
INNER JOIN eventdetails d ON d.eventid = e.eventid AND d.machine = m.machine 
INNER JOIN (SELECT machine, MAX(eventid) maxevent FROM event GROUP BY machine) ma ON m.machine = ma.machine AND e.eventid = ma.maxevent 
GROUP BY m.machine, e.start, e.stop, d.name, d.value 
+1

OPは、提供されたコードの他の結合と一致するため、構文が快適であると想定していました。しかし、はい、SQL Serverでこれらは内部結合になります、私は私の答えを更新します。 –

+0

完璧に働いています、ありがとう! – lingo

関連する問題