여러 시간에 서로 다른 데이터를 로깅하는 장치가 있고 시간별로 정렬 된 단일 쿼리에서 모든 데이터를 가져 오려고합니다. 테이블의 종류의 예는 내가 가진 :이 테이블을 어떻게 가입시킬 수 있습니까?
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와 타임 스탬프에 테이블을 조인 단일 쿼리를 갖고 싶어. 내가 추구하고 출력 형식의 예는 다음과 같습니다 나는 FULL 일을 시도했습니다
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
이 가입하지만 거대한 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