3

編集。私が抱えていた1つの主要な問題を見逃しました。一意の「device_MAC」行をすべて表示したいと考えています。したがって、このクエリで 3 行を出力する必要があります (元のクエリに従って)。私が抱えている問題は、テーブル内の最大タイムスタンプである=を介しdataてテーブルをテーブルに接続することです。remote_nodedt_shortrn_shortdt_shortdata

3 つのテーブル (2 つは多対多の関係) に対してクエリを実行する際に問題があります。

私がやろうとしていること:

  1. rn_IEEE最大のタイムスタンプを持つテーブルから個別に取得しremotenodesます (この例では、3 つの個別の短いアドレスを持つ 3 つの行が取得されますrn_short) 。
  2. devicenamesdevice_IEEEのテーブルに参加する
  3. タイムスタンプが最大dt_shortのテーブルから個別に取得するdata
  4. 上記のクエリから結合dt_shortするrn_short

今私が直面している問題は、上記のクエリを個別に実行できることです。最初の 3 つのクエリをまとめてクエリを作成しましたが、データの最後のビットを適切に結合して結果を得ることができないようです。欲しいです。

私はこれを解決しようとしてサークルに参加してきました。これは、すべてのテストデータとクエリを含むSQL Fiddleへのリンクです。最初の行で必要なことを行いますが、最初の行の後のテーブル「データ」はNULLです。

このSQLフィドルを参照してください

4

4 に答える 4

2

要件とデータを調べた後、クエリを変更INNER JOINして、dataテーブルの代わりにを含める必要があるようですLEFT JOIN

デモで SQL Fiddle を参照してください

select rn.*, dn.*, d.*
from remotenodes rn
inner join devicenames dn
  on rn.rn_IEEE = dn.device_IEEE
  and rn.rn_timestamp = (SELECT MAX(rn_timestamp) FROM remotenodes 
                              WHERE rn.rn_IEEE = rn_IEEE 
                              GROUP BY rn_IEEE)
inner join data d
  on rn.rn_short = d.dt_short
  AND d.dt_timestamp = (SELECT MAX(d2.dt_timestamp) AS ts
                        FROM data d2 
                        WHERE d.dt_short = d2.dt_short
                        GROUP BY d2.dt_short)
于 2012-08-22T15:00:34.927 に答える
0

このクエリを試してください。私にとっては、1行が返されます。

SELECT rn_short, rn_IEEE, device_name
FROM 
(SELECT DISTINCTROW dt_short FROM (SELECT * FROM `data` ORDER BY `dt_timestamp` DESC) as data ) as a
JOIN 
(SELECT rn_IEEE, rn_short, device_name FROM devicenames dn JOIN (SELECT DISTINCTROW rn_IEEE, rn_short FROM (SELECT * FROM `remotenodes` ORDER BY `rn_timestamp` DESC) as remotenodes GROUP BY rn_IEEE) as rn ON dn.device_IEEE = rn.rn_IEEE) as b
ON a.dt_short = b.rn_short
于 2012-08-22T12:53:58.677 に答える
0

皆様、ご回答ありがとうございます。ビューを使用して問題を解決することができました。それは最も効率的な方法ではありませんが、今のところはうまくいくと思います。SQLフィドルのリンクは次のとおりです。

http://sqlfiddle.com/#!2/4076e/8

于 2012-08-23T07:22:58.273 に答える
0

SQLフィドルでクエリを実行したことは正しいです。左結合を使用する代わりに内部結合を使用して、最初の行が得られるようにします

乾杯。

于 2012-08-22T13:33:02.887 に答える