Можно ли получить данные из двух разных строк в одной строке (postgres)

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть эта таблица, в которой данные одного и того же идентификатора клиента находятся в новой строке:

 order_id | cust_id | order_date                 | menu_item 
------------------------------------------------------------
order1   | cust1   | January 19, 2020, 1:00 PM  |           
         | cust1   |                            | food_A    
 

Можно ли получить одну строку данных, как показано ниже:

 order_id | cust_id | order_date                 | menu_item 
------------------------------------------------------------
order1   | cust1   | January 19, 2020, 1:00 PM  | food_A       
 

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

 select s.cust_id, s.menu_item from tableA s inner join tableA t on s.cust_id = t.cust_id
 

Комментарии:

1. Might be my join isn't correct … что должно делать ваше объединение? Вы выполняете самосоединение, но непонятно почему. Пожалуйста, включите примеры входных / выходных данных.

Ответ №1:

В вашем случае, предполагая, что пропущенные значения равны NULL , вы можете просто агрегировать по order_id и cust_id , а затем взять максимальное значение двух других столбцов:

 SELECT
    order_id,
    cust_id,
    MAX(order_date) AS order_date,
    MAX(menu_item)  AS menu_item
FROM tableA
GROUP BY
    order_id,
    cust_id;
 

Комментарии:

1. а.А. Хорошо. да, думаю, теперь я все понял. спасибо @TimBiegeleisen

2. есть ли другой способ сделать это @TimBiegeleisen? похоже, что загрузка этого занимает много времени, если данные большие

3. Правильным действием здесь было бы зафиксировать ваши данные таким образом, чтобы вам даже не нужно было агрегировать их таким образом.

4. да, похоже, это самый лучший способ. спасибо @TimBiegeleisen