Как объединить две таблицы, заполнив поле его минимальным значением?

Я пытаюсь заполнить свои данные, но не могу найти для этого хорошего решения.

Я работаю с периодами, генерируемыми динамически (пример проекции). Я не знаю, лучше ли воссоздавать таблицу только для того, чтобы присоединиться к моему столу TREND.

-- SQL CODE TO RECREATE MY TREND TABLE
CREATE OR REPLACE TABLE test.TREND(
Asset STRING,
Metric_Code STRING,
Metric_V FLOAT64,
Trend FLOAT64,
YearMonth INT64,
YearMonthRank INT64
);
INSERT INTO test.TREND
VALUES ('RDX4', 'AXCP32', 88.0853212, 89.0853212, 202103,1),
('RDX4', 'AXCP32', 88.0853212,85.0853212, 202106,2),
('RDX4', 'AXCP34', 79.41087028,81.0853212, 202103,3),
('RDX4', 'AXCP34', 70.44587,69.0853212, 202106,4),
('MRDX4', 'AXCP32', 88.0853212, 89.0853212, 202103,1),
('MRDX4', 'AXCP32', 88.0853212,85.0853212, 202106,2),
('MRDX4', 'AXCP34', 79.41087028,81.0853212, 202103,3),
('MRDX4', 'AXCP34', 70.44587, 69.0853212,202106,4);

-- SQL CODE TO RECREATE MY PROJECTION TABLE
CREATE OR REPLACE TABLE test.PROJECTION(
Asset STRING,
Metric_Code STRING,
Metric_V FLOAT64,
Trend FLOAT64,
YearMonth INT64,
YearMonthRank INT64
);
INSERT INTO PROJECTION
VALUES (NULL,NULL,NULL,NULL, 202103,1),
(NULL,NULL,NULL,NULL, 202106,2),
(NULL,NULL,NULL,NULL, 202109,3),
(NULL,NULL,NULL,NULL, 202112,4),
(NULL,NULL,NULL,NULL, 202203,5),
(NULL,NULL,NULL,NULL, 202206,6),
(NULL,NULL,NULL,NULL, 202209,7),
(NULL,NULL,NULL,NULL, 202212,8);

Теперь я застрял, я не могу правильно объединить данные, чтобы рассчитать свой прогноз. Я попытался объединить Asset, Metric_Code и тренд, но это не работает, как вы можете себе представить:

SELECT COALESCE(B.Asset,(SELECT C.asset FROM gopass.TREND C WHERE C.YearMonthRank=1 AND B.asset=C.asset)) AS Asset,
B.Metric_Code,
B.Metric_V,
B.Trend,
A.YearMonth,
A.YearMonthRank
FROM gopass.PROJECTION A
LEFT JOIN gopass.TREND B  ON A.YearMonthRank = B.YearMonthRank
ORDER BY Asset ASC;

Я понятия не имею, как создать вывод, как показано ниже. Для каждой пары Asset + Metric_Code мне также нужно заполнить столбцы YearMonth и YearMonthRank.

После этого я смогу добавить свой столбец прогнозов!

АктивМетрика_КодМетрика_VТрендГод месяцГодМесяцРанг
RDX4AXCP3288.085321289.08532122021031
RDX4AXCP3288.085321285.08532122021062
RDX4AXCP322021093
RDX4AXCP322021124
RDX4AXCP322022035
RDX4AXCP322022066
RDX4AXCP322022097
RDX4AXCP322022128
RDX4AXCP3479.4108702881.08532122021031
RDX4AXCP3470.4458769.08532122021062
RDX4AXCP342021093
RDX4AXCP342021124
RDX4AXCP342022035
RDX4AXCP342022066
RDX4AXCP342022097
RDX4AXCP342022128
MRDX4AXCP3288.085321289.08532122021031
MRDX4AXCP3288.085321285.08532122021062
MRDX4AXCP322021093
MRDX4AXCP322021124
MRDX4AXCP322022035
MRDX4AXCP322022066
MRDX4AXCP322022097
MRDX4AXCP322022128
MRDX4AXCP3479.4108702881.08532122021031
MRDX4AXCP3470.4458781.08532122021062
MRDX4AXCP342021093
MRDX4AXCP342021124
MRDX4AXCP342022035
MRDX4AXCP342022066
MRDX4AXCP342022097
MRDX4AXCP342022128
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Учти это:

For each Asset + Metric_Code couple , i need to fill the YearMonth & YearMonthRank columns too

Для этого приведенный ниже запрос сначала расширяет PROJECTION таблицу для каждой комбинации (Asset, Metric_Code) на CROSS JOIN.

CREATE TEMP TABLE TREND (
  Asset STRING,
  Metric_Code STRING,
  Metric_V FLOAT64,
  Trend FLOAT64,
  YearMonth INT64,
  YearMonthRank INT64
);
INSERT INTO TREND
VALUES ('RDX4', 'AXCP32', 88.0853212, 89.0853212, 202103,1),
       ('RDX4', 'AXCP32', 88.0853212,85.0853212, 202106,2),
       ('RDX4', 'AXCP34', 79.41087028,81.0853212, 202103,3),
       ('RDX4', 'AXCP34', 70.44587,69.0853212, 202106,4),
       ('MRDX4', 'AXCP32', 88.0853212, 89.0853212, 202103,1),
       ('MRDX4', 'AXCP32', 88.0853212,85.0853212, 202106,2),
       ('MRDX4', 'AXCP34', 79.41087028,81.0853212, 202103,3),
       ('MRDX4', 'AXCP34', 70.44587, 69.0853212,202106,4)
;

-- SQL CODE TO RECREATE MY PROJECTION TABLE
CREATE TEMP TABLE PROJECTION (
  Asset STRING,
  Metric_Code STRING,
  Metric_V FLOAT64,
  Trend FLOAT64,
  YearMonth INT64,
  YearMonthRank INT64
);
INSERT INTO PROJECTION
VALUES (NULL,NULL,NULL,NULL, 202103,1),
       (NULL,NULL,NULL,NULL, 202106,2),
       (NULL,NULL,NULL,NULL, 202109,3),
       (NULL,NULL,NULL,NULL, 202112,4),
       (NULL,NULL,NULL,NULL, 202203,5),
       (NULL,NULL,NULL,NULL, 202206,6),
       (NULL,NULL,NULL,NULL, 202209,7),
       (NULL,NULL,NULL,NULL, 202212,8)
;

SELECT B.Asset_Key AS Asset,
       B.Metric_Code_Key AS Metric_Code,
       C.Metric_V,
       C.Trend,
       A.YearMonth,
       A.YearMonthRank
  FROM PROJECTION A
 CROSS JOIN (SELECT DISTINCT Asset AS Asset_Key, Metric_Code AS Metric_Code_Key FROM TREND) B
  LEFT JOIN TREND C
    ON B.Asset_Key = C.Asset AND B.Metric_Code_Key = C.Metric_Code AND A.YearMonthRank = C.YearMonthRank
 ORDER BY 1, 2, A.YearMonthRank;

Спасибо, @Jaytiger! Теперь я хорошо понимаю, как использовать перекрестное соединение!

Jonito 17.05.2022 08:38

Другие вопросы по теме