Таблица Измеренная точка :
Таблица ребро :
Таблица Meas_point_Data :
- ID
- Meas_point_id (внешний ключ)
- дата
- значение
Таблица edge_meas_point :
- id
- edge_id (внешний ключ)
- measure_point_id (внешний ключ)
- order (int)
Пример данных :
точка измерения (идентификатор, имя):
- 1, измерение 1
- 2, измерение 2
- 3, измерение 3
edge (id, name):
edge_meas_point (id, edge_id, measure_point_id, заказ):
- 1, 1, 1, 3
- 2, 1, 2, 1
- 3, 1, 3, 2
measure_point_data (id, measure_point_id, дата, значение):
- 1, 1, 2018-12-20, 11
- 2, 2, 2018-12-20, 12
- 3, 3, 2018-12-20, 13
- 4, 1, 2018-12-21, 21
- 5, 3, 2018-12-21, 23
- 6, 1, 2018-12-22, 31
- 7, 1, 2018-12-23,41
- 8, 2, 2018-12-23, 42
- 9, 3, 2018-12-23, 43
Идея
Таблица edge_meas_point объединяет ребро с measure_point с заданным приоритетом (заказ).Если нет данных из точки измерения в заказе 1, заказ 2 должен быть взят и так далее.Например:
SELECT TOP 1 d.date, d.value
FROM meas_point_data AS d, edge_meas_point AS em
WHERE
em.meas_point_id=d.meas_point_id AND
em.edge_id=1 AND
d.date=2018-12-21
ORDER BY em.order
отлично работает на одну дату в ГДЕ, но что, если я хочу нарисовать диаграмму из этих данных?На основании этого примера мой выбор должен вернуть:
- 2018-12-20 - 12
- 2018-12-21 - 23
- 2018-12-22 -31
- 2018-12-23 - 42
В моем реальном сценарии дата - это дата-время - каждые 15 минут.И я должен получить данные за прошлый месяц .. это дает как (60/15) * 24 * 30 = 2880 пунктов, и я должен нарисовать несколько ребер на одном графике.Так как же сделать это эффективно?(Я должен использовать MS SQL)