У меня есть две таблицы: одна содержит список идентификаторов, а другая содержит некоторую информацию об этих идентификаторах, относящуюся ко времени.
пример
ID_TABLE
ID
1
2
3
INFO_TABLE
ID START END STATE
1 2000-01-01 2000-01-31 A
1 2000-02-01 2000-03-31 B
3 2000-02-01 2000-02-31 A
3 2000-03-01 2000-05-31 C
(обратите вниманиеэтот ID = 2 отсутствует во второй таблице)
Теперь я хочу превратить эту информацию в данные сбалансированной панели , что означает, что я хочу знать, для чего присутствует STATE
каждые ID
в определенные даты.
Моя SQL-команда выглядит следующим образом:
SELECT
id_table.id,
t1.state AS Jan,
t2.state AS Feb,
t3.state AS March
FROM
id_table
LEFT JOIN info_table AS t1
ON id_table.id = t1.id
AND '2000-01-15' BETWEEN t1.start AND t1.end
LEFT JOIN info_table AS t2
ON id_table.id = t2.id
AND '2000-02-15' BETWEEN t2.start AND t2.end
LEFT JOIN info_table AS t3
ON id_table.id = t3.id
AND '2000-03-15' BETWEEN t3.start AND t3.end
;
Есть ли более эффективный способ?