Добавление строк с пропущенными записями - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть таблица в следующем формате с несколькими идентификаторами, месяцами (1-72), несколькими мерами (1-40). Ниже приведен пример таблицы. Записи для нескольких месяцев отсутствуют для каждой меры, как видно (месяц 5,8 отсутствует для меры 1, месяц 8 и 9 отсутствует для меры 3 и так далее). Я хочу создать новую меру, скажем, меру 4, которая является суммой двух мер (скажем, мера 1 + мера 3) для каждого идентификатора месяца. Я пытался использовать функции задержки / опережения, но я не мог учесть это за пропущенные месяцы.

+----+-------+--------------+---------------+
| ID | month | measure name | measure value |
+----+-------+--------------+---------------+
|  1 |     1 | Measure1     |            20 |
|  1 |     2 | Measure1     |            80 |
|  1 |     3 | Measure1     |            60 |
|  1 |     4 | Measure1     |            40 |
|  1 |     6 | Measure1     |           100 |
|  1 |     7 | Measure1     |           250 |
|  1 |     9 | Measure1     |            60 |
|  1 |    10 | Measure1     |            70 |
|  1 |     1 | Measure2     |            40 |
|  1 |     2 | Measure2     |            30 |
|  1 |     3 | Measure2     |            25 |
|  1 |     4 | Measure2     |            75 |
|  1 |     5 | Measure2     |           115 |
|  1 |     6 | Measure2     |            80 |
|  1 |     7 | Measure2     |            85 |
|  1 |     9 | Measure2     |            95 |
|  1 |    10 | Measure2     |           200 |
|  1 |     1 | Measure3     |           220 |
|  1 |     2 | Measure3     |            50 |
|  1 |     3 | Measure3     |            60 |
|  1 |     4 | Measure3     |            90 |
|  1 |     5 | Measure3     |            20 |
|  1 |     6 | Measure3     |            70 |
|  1 |     7 | Measure3     |            80 |
|  1 |    10 | Measure3     |           105 |
+----+-------+--------------+---------------+

Окончательный результат должен выглядеть примерно так (measure4 = measure1 + measure3).

+----+-------+--------------+---------------+
| ID | month | measure name | measure value |
+----+-------+--------------+---------------+
|  1 |     1 | Measure4     |           240 |
|  1 |     2 | Measure4     |           130 |
|  1 |     3 | Measure4     |           120 |
|  1 |     4 | Measure4     |           130 |
|  1 |     5 | Measure4     |            20 |
|  1 |     6 | Measure4     |           170 |
|  1 |     7 | Measure4     |           330 |
|  1 |     9 | Measure4     |            60 |
|  1 |    10 | Measure4     |           175 |
+----+-------+--------------+---------------+

Можете ли вы помочь мне с этим? Спасибо

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете отфильтровать по двум интересующим вас мерам, а затем использовать агрегирование:

select 
    month,
    'Measure4' measure_name,
    sum(measure_value) measure_value
from mytable 
where measure_name in ('Measure1', 'Measure3')
group by month 
order by month 

Это предполагает, что по крайней мере одна из двух мер доступна для каждого месяца (в противном случае вы могли бы пропустить month в результирующем наборе), что соответствует вашим образцам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...