Выберите запрос SQL, который заполнит пропущенное значение из другого выбора - PullRequest
1 голос
/ 10 октября 2019

У меня есть таблица user1:

id |date
1   2018-01-01    
2   null   
3   2018-01-01    
4   null

и другая таблица user2:

id |date_buy
1   2018-01-01    
1   2018-01-02    
2   2018-01-01    
2   2018-01-02    
3   2018-01-01    
4   2018-01-01

Я хотел бы сделать запрос на выбор, который выбирает идентификатор и дату из таблицыuser1, но если поле даты равно NULL, то для этого пользователя он должен взять минимальное значение date_buy и заполнить пропущенное им.

Итак, моя первая идея заключалась в следующем: - сделать простой запрос по первой таблице SELECT id, dateот user1

  • сделать простой запрос ко второй таблице SELECT id, min (date_buy) в качестве даты от группы user2 по id

  • объединитьДва запроса и сделать отличное, где дата не является нулевой

, которые дают что-то вроде:

SELECT distinct id, date 
from (SELECT id, date 
      from user1 
      UNION 
      select id, min(date_buy) as date 
      from user2 group by id) 
 where date is not null

Но я изо всех сил, чтобы сформировать это и заставить его работать.

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

В Улей, я думаю, я бы сделал:

select u1.id, coalesce(u1.date, u2.min_date)
from user1 u1 left join
     (select id, min(date_buy) as min_date
      from user2
      group by id
     ) u2
     on u1.id = u2.id;
0 голосов
/ 10 октября 2019

это должно работать

  select u1.id,COALESCE(u1.date, u2.min_dt) from user1 as u1 
    join 
    ( select id,MIN(date_buy) as min_dt from user2 group by id
    ) as u2 
    on u1.id=u2.id;
...