Присоединяйте записи только к первому совпадению

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

Одна из таблиц содержит ежедневные записи на User, а вторая таблица содержит цель для каждого пользователя и дня.

Объединенная таблица результатов должна объединять только первое вхождение User и Day, а для остальных устанавливать значение null. Цель в объединенной таблице можно интерпретировать как DailyGoal.

Пример:

Table1                                 Table2
Id   Day          User    Value        Id  Day          User   Goal
================================       ============================
01   01/01/2020   Bob     100          01  01/01/2020   Bob    300
02   01/01/2020   Bob     150          02  02/01/2020   Carl   170
03   01/01/2020   Bob     50           
04   02/01/2020   Carl    200          
05   02/01/2020   Carl    30    

ResultTable
Day          User   Value   Goal 
============================================
01/01/2020   Bob    100     300
01/01/2020   Bob    150     (null)
01/01/2020   Bob    50      (null)
02/01/2020   Carl   200     170
02/01/2020   Carl   30      (null)

Я пытался сделать top1, отдельные подзапросы, но не могу найти способ сделать это. Это возможно?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один вариант использует оконные функции:

select t1.*, t2.goal
from (
    select t1.*,
        row_number() over(partition  by day, user order by id) as rn
    from table1 t1 
) t1
left join table2 t2 on t2.day = t1.day and t2.user = t1.user and t1.rn = 1

Выражение case еще проще:

select t1.*,
    case when row_number() over(partition  by day, user order by id) = 1
        then t2.goal
    end as goal
from table1 t1

Спасибо! Я понятия не имею, что означает или делает синтаксис partition, но я изучу его

Filipe Nóbrega 24.12.2020 12:22

Другие вопросы по теме