PostgreSQL: выберите результаты из множества строк, сверните результаты и верните одну строку - PullRequest
0 голосов
/ 08 сентября 2018

Таблица в PostgreSQL 10 создается с:

CREATE TABLE public."Table"(
    "ID" serial,
    "Epoch" smallint,
    "Unit" smallint,
    "Value" double precision
);

и в нем хранятся показания двух единиц измерения.

Как правило, обе единицы измерения должны измерять и давать показания параллельно, поэтому в одно и то же время (называемое здесь: эпоха) должны быть вставлены две строки.

Однако бывают моменты, когда не все ожидаемые два показания предоставляются для одной эпохи, как это показано в примере ниже (эпоха = 30 и эпоха = 40):

 Epoch | Unit | Value 
-------+------+-------
    10 |    1 |   1.1
    10 |    2 |   1.2
    20 |    1 |   2.1
    20 |    2 |   2.2
    30 |    1 |   3.1
    40 |    2 |   4.2
    50 |    1 |   5.1
    50 |    2 |   5.2
(8 rows)

У меня проблема со сборкой запросов, которая выполняет следующие действия:

  1. Проверьте, присутствуют ли строки для Unit = 1 и Unit = 2 для одной и той же эпохи
  2. Вернуть результат для каждой эпохи для обеих единиц измерения в одной строке, как здесь:

    Epoch ; Value_Unit1 ; Value_Unit2
    

Строки без указаний, поступающие из обоих подразделений, должны быть исключены из результатов.

Я ищу решение, дающее (для приведенного примера) точный результат следующим образом:

10 ; 1.1 ; 1.2

20 ; 2.1 ; 2.2

50 ; 5.1 ; 5.2

Многие примеры здесь имеют дело с очень похожими проблемами, но они не позволяют мне найти правильный ответ для моей конкретной проблемы или ... я не могу понять подсказки, предложенные там.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 сентября 2018

Соедините таблицу с самим собой, указав в обоих случаях разные псевдонимы:

SELECT
    T1."Epoch",
    T1."Value" AS Value_Unit1,
    T2."Value" AS Value_Unit2
FROM
    public."Table" AS T1
    JOIN public."Table" AS T2
    USING("Epoch")
WHERE
    T1."Unit" = 1 AND
    T2."Unit" = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...