Необходимо транспонировать некоторые значения SQL по 2 индексам, сгруппированным по несоответствующим датам (SQL и Python) - PullRequest
1 голос
/ 30 января 2020

Я включил изображение, которое показывает, что я пытаюсь сделать в SQL. Таблица, которую вы видите слева - это то, что я получаю при выполнении запроса SQL на моем сервере. Я пытаюсь создать таблицу справа, используя SQL / Python. Я бы использовал сводку, но, поскольку сводка агрегирует значения, мне нужно было бы взять среднее, сумму, минимум, максимум или что-то еще из столбца номера компонента. По сути, мне нужно 2 транспонирования индексов. Для каждого серийного номера можно выполнить несколько тестов. Мне нужно, чтобы первый тест по дате отображался в первом столбце значений теста, то же самое для второго, третьего или четвертого теста. Мне нужно, чтобы значения для каждого серийного номера и каждого компонента отображались в «тесте 1», «тесте 2», «тесте 3». Сложность состоит в том, что тест 1, тест 2 и тест 3 различны для каждой части, и все же их необходимо сгруппировать в сегменты по дате последовательного теста для каждого серийного номера.

Если кто-то может помочь меня с помощью некоторых методов или помочь мне создать псевдокод для того, что я пытаюсь сделать, я был бы очень признателен. Спасибо.

Вот ссылка на изображение таблиц: слева - то, что потянул мой запрос SQL, а справа - то, как я хочу.

enter image description here

1 Ответ

0 голосов
/ 30 января 2020

Вы можете использовать row_number() и условное агрегирование:

select 
    serial_number,
    component_number
    max(case when rn = 1 then test_value end) test1,
    max(case when rn = 2 then test_value end) test2
from (
    select
        t.*,
        row_number() over(partition by serial_number, component_number order by test_date) rn
    from mytable t
) t
group by serial_number, component_number

В подзапросе row_number() присваивает ранг каждой записи в группах, совместно использующих одинаковые serial_number и component_number. Затем внешний запрос агрегирует по serial_number и component_number и распределяет по столбцам test_value в соответствии с их рангом. Вы можете расширить предложение select внешнего запроса, добавив более условных max() s, чтобы обрабатывать более двух тестов на (serial_number, component_number) кортеж.

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