異なる時間に異なるデータを記録する多数のデバイスがあり、すべてのデータを1つのクエリで時間順に取得する必要があります。私が持っているテーブルの種類の例:これらのテーブルをどのように結合できますか?
CREATE TABLE location(
device_id INT, -- REFERENCES device(id)
timestamp DATETIME2 NOT NULL,
position GEOMETRY NOT NULL
)
CREATE TABLE temperature(
device_id INT, -- REFERENCES device(id)
timestamp DATETIME2 NOT NULL,
temp FLOAT NOT NULL
)
私はタイムスタンプが一致しない場合にNULLを含んでDEVICE_IDとタイムスタンプにテーブルを結合する単一のクエリを持っていると思います。私が求めている出力形式の例は次のとおりです。
device_id, timestamp, location, temperature
1, 2011/12/1 10:00:00, (35.1, 139.2), NULL
1, 2011/12/1 10:00:01, NULL, 9.0
1, 2011/12/1 10:00:02, (35.1, 139.2), 9.1
私はFULLをやってみたのJOINが、巨大なCASE文なしにタイムスタンプ列を行う方法を見つけ出すことはできません、私が唯一示されましたが、(心に留めておきます2つのテーブル、これはもっと多く持つことができます)。
SELECT
location.device_id,
CASE WHEN location.timestamp IS NOT NULL THEN
location.timestamp
ELSE
temperature.timestamp
END as timestamp,
location,
temp
FROM
location
FULL JOIN temperature ON location.device_id = temperature.device_id
AND location.timestamp = temperature.timestamp
ORDER BY
timestamp
このような種類のクエリを作成する簡単な方法はありますか?
coalesce演算子を使用すると、ジョブが実行されます。 isnull()演算子は同じことを行いますが、2つのパラメータしか受け入れませんが、合体は多くを受け入れます。 – AndrewBay
魅力的な作品です!どうもありがとう! – brianestey