2017-01-05 11 views
0

私は、各sensorID(各sensorIDの最新の値)の最後の行のみを与えるselect文のために参加する必要がある2つのテーブルがあります。ここに私のテーブルです:内側の最も最近の行を結合する

sensorID| Name | Description | stationID 
--------------------------------- 
1 | Name1 | Desc1 | 2 
2 | Name2 | Desc2 | 1 
3 | Name3 | Desc3 | 3 
4 | Name4 | Desc4 | 2 

vID | sensorID | Date | Time | value 
--------------------------------- 
1 | 1 | 2016-12-29 | 15:08:00 | 0.2 
2 | 1 | 2016-12-29 | 15:10:00 | 0.21 
3 | 1 | 2016-12-29 | 15:12:00 | 0.4 
4 | 4 | 2016-12-29 | 15:14:00 | 12.2 

私は次のことを実行してみました:

これらの結果を生成
SELECT * FROM H INNER JOIN Values V ON H.sensorID = V.sensorID WHERE H.stationID = 2; 

sensorID | Name | Description | stationID | vID | sensorID | Date | Time  | value 
1 | Name1| Desc1  | 2   | 1 | 1  |2016-12-29 | 15:08:00 | 0.2 
1 | Name1| Desc1  | 2   | 2 | 1  |2016-12-29 | 15:10:00 | 0.21 
1 | Name1| Desc1  | 2   | 3 | 1  |2016-12-29 | 15:12:00 | 0.4 
4 | Name4| Desc4  | 2   | 4 | 1  |2016-12-29 | 15:14:00 | 12.2 

しかし、私は探していますこの出力:

sensorID | Name | Description | stationID | vID | sensorID | Date | Time  | value 
1 | Name1| Desc1  | 2   | 3 | 1  |2016-12-29 | 15:12:00 | 0.4 
4 | Name4| Desc4  | 2   | 4 | 1  |2016-12-29 | 15:14:00 | 12.2 
+0

サブクエリの 'Values'行をフィルタリングし、' H'テーブルに追加します。この回答をチェックして、サブクエリで結合を使用する方法を確認してください。http://stackoverflow.com/questions/10493512/how-to-write-subquery-inside-the-outer-join-statement –

+0

あなたは正しいですが、私はそれをフィルタリングする方法はわかりません:/それは "sensorIDごとに最新の値を取得してから、この結果を他のテーブルにジョインする"のようなものです。 – Lukas

答えて

3

あなたは、各センサーの最後の行をしたい場合、私は、日付ではなくid列を使用するように傾斜させることだろう/時:

SELECT * 
FROM H INNER JOIN 
    Values V 
    ON H.sensorID = V.sensorID 
WHERE H.stationID = 2 AND 
     V.id = (SELECT MAX(v2.id) FROM Values v2 WHERE v2.SensorId = v.SensorId); 

このバージョンでは、Values(SensorId, id)のインデックスを活用することができます。

1

TRYこの

select * 
from table1 a 
inner join table2 b on a.sensorID = b.sensorID 
inner join (select sensorID, max(concat(dated, timed)) dateT from table2 
               group by sensorID) t on t.sensorID = b.sensorID 
    and t.dateT = concat(b.DateD, b.TimeD) 

OUTPUT

sensorID Name DescR stationID vID sensorID DateD  TimeD    value sensorID dateT 
1   Name1 Desc1 2  3   1  2016-12-29 15:12:00.0000000 0.4  1   2016-12-2915:12:00.0000000 
4   Name4 Desc4 2  4   4  2016-12-29 15:14:00.0000000 12.2 4   2016-12-2915:14:00.0000000 
+0

これは完璧に機能します!どうもありがとうございました! :) – Lukas

関連する問題