SAS SQL Левое соединение на основе условий без удаления строк в таблице A

У меня есть 2 таблицы, и я хочу оставить таблицу соединения B с A на основе определенных критериев.

Соединение основано на «ID» (a.ID = b.ID), но я хочу ввести только 2 столбца «status_date» и «flag_y» из таблицы B, если b.status_date >= a.date

Таблица А:

+------------+-----+--------+
|    date    | ID  | Flag_x |
+------------+-----+--------+
| 01/03/2019 | 100 | x      |
| 01/03/2019 | 101 | x      |
| 02/03/2019 | 102 | x      |
| 02/03/2019 | 103 | x      |
+------------+-----+--------+

Таблица Б:

+-------------+---------+--------+
| status_date | field_x | Flag_y |
+-------------+---------+--------+
| 15/03/2019  |     100 | y      |
| 10/01/2019  |     102 | y      |
+-------------+---------+--------+

Желаемый результат:

+------------+-----+--------+-------------+--------+
|    date    | ID  | Flag_x | status_date | Flag_y |
+------------+-----+--------+-------------+--------+
| 01/03/2019 | 100 | x      | 15/03/2019  | y      |
| 01/03/2019 | 101 | x      |             |        |
| 02/03/2019 | 102 | x      |             |        |
| 02/03/2019 | 103 | x      |             |        |
+------------+-----+--------+-------------+--------+

Код, который я пробовал ниже, удаляет строку для идентификатора 102 в этом случае, когда я хочу сохранить эту строку, но не вводить информацию из таблицы B, поскольку «status_date» находится перед «датой» в таблице A. Я предполагаю, что нужно что-то добавить в пункте где???

PROC SQL;
Create Table Output As 
Select
a.*
,b.status_date
,b.flag_y

From Table_A as a
Left join Table_B as b
On b.ID = a.ID

Where b.status_date is Null or b.status_date >= a.date

;QUIT;

Надеюсь, это имеет смысл, и кто-то может помочь

Вы должны добавить фильтр даты в предложение соединения.

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

Ответы 1

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

Пожалуйста, попробуйте это.

SELECT 
  a.*
  ,b.status_date
  ,b.flag_y
FROM 
   Table_A as a
 LEFT JOIN Table_B as b
   ON b.ID = a.ID
   AND b.status_date >= a.date

Так это было просто! Я немного смущен, так как при попытке сделать что-то очень похожее в SAS Hadoop ему не нравится условие даты. В любом случае, это будет другой вопрос, который нужно задать

Rockshah 08.04.2019 12:18

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