Как конвертировать метку времени в числа - PullRequest
0 голосов
/ 22 ноября 2018

Предположим, у меня есть таблица, подобная этой:

Id      Types      Timestamp

1        A          2014-02-04 00:00:00
2        A          2014-02-05 00:00:00
1        A          2014-02-05 03:59:00 
3        C          2014-05-06 03:59:00
1        B          2014-02-04 03:00:00
2        D          2014-02-05 00:40:00 

Я бы хотел, чтобы выходные данные были такими:

Id     1       2        3          4          5           etc
1      A       B        A          C          D           ...
2      A       D        NULL       NULL       NULL
3      C       NULL     NULL       NULL       NULL

Можно ли сделать так, чтобы время выражало порядок типа.

Спасибо за любые подсказки.

1 Ответ

0 голосов
/ 22 ноября 2018

Предварительные комментарии:

  1. SQL может возвращать только предварительно определенное количество возвращаемых столбцов.ИМХО, лучшее, что вы можете получить, - это значения, объединенные в массив.
  2. Я назвал вашу входную таблицу MyTable и переименовал столбец от Timestamp до MyTimestamp, чтобы избежать конфликта с ключевым словом соответствующего типа.
  3. Вы поместили C и D в 1 строку вашего вывода.Я буду рассматривать это как опечатку (они не на ID = 1)

-

WITH RECURSIVE ConcatAndOrder(ID, MyResult, RowNumForOrder, RowCountForOrder) AS (
    SELECT ID, ARRAY[Type], RowNumForOrder, RowCountForOrder
    FROM IndexedTable
    WHERE RowNumForOrder = 1
    UNION ALL
    SELECT I.ID, MyResult || I.Type, I.RowNumForOrder, I.RowCountForOrder
    FROM IndexedTable I
    JOIN ConcatAndOrder C on I.ID = C.ID and I.RowNumForOrder = C.RowNumForOrder + 1
), IndexedTable(ID, Type, RowNumForOrder, RowCountForOrder) AS (
    SELECT ID, Type, 
        row_number() OVER (PARTITION BY ID ORDER BY MyTimestamp),
        count(*) OVER (PARTITION BY ID)
    FROM MyTable
)
SELECT ID, MyResult
FROM ConcatAndOrder
WHERE RowNumForOrder = RowCountForOrder
ORDER BY ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...