[英]sql - filtering with a condition so there is only one row per date
我正在嘗試加入一個數據集,該數據集具有多個 ID 的多個日期以及同一日期的多個行,甚至一個具有多個 ID 的多個日期的數據集。
我們稱它為Data1
ID | Date | PostDate1 | PostDate2
01 | 01/01/2020 | 02/01/2020 | 03/01/2020
01 | 06/01/2020 | 07/01/2020 | 08/01/2020
02 | 02/01/2020 | 03/01/2020 | 04/01/2020
02 | 03/01/2020 | 04/01/2020 | 05/01/2020
這是Data2
ID | Date | Code
01 | 01/01/2020 | AA
01 | 01/01/2020 | .
01 | 02/01/2020 | BB
01 | 02/01/2020 | AA
01 | 04/01/2020 | BB
01 | 07/01/2020 | .
01 | 07/01/2020 | BB
01 | 07/01/2020 | .
01 | 08/01/2020 | AA
02 | 03/01/2020 | .
02 | 03/01/2020 | AA
02 | 04/01/2020 | AA
02 | 04/01/2020 | BB
03 | 04/01/2020 | .
我想合並它們,以便PostCode1
和PostCode2
只有一個值。 它會是這樣的:
ID | Date | PostDate1 | PostDate2 | PostCode1 | Postcode2
01 | 01/01/2020 | 02/01/2020 | 03/01/2020 | BB | .
01 | 06/01/2020 | 07/01/2020 | 08/01/2020 | BB | AA
02 | 02/01/2020 | 03/01/2020 | 04/01/2020 | AA | BB
02 | 03/01/2020 | 04/01/2020 | 05/01/2020 | BB | .
但這只是一個例子,我不確定條件,即我不確定是否要選擇:
- 第一個按字母順序
- 最后一個按字母順序
- 任何如果它沒有丟失
- 一個特定的,如果它在那個日期存在,如果它不存在,那么任何
是否有可能創建一個代碼,我可以根據我想要應用的條件輕松更改其中的一部分?
我目前用於加入的代碼是:
proc sql;
create table new as
select distinct a.*
, data2_1.code as PostCode1
, data2_2.code as PostCode2
from data1 a
left join data2 data2_1
on a.id=data2.id and a.postdate1=data2.date
from data1 a
left join data2 data2_2
on a.id=data2.id and a.postdate2=data2.date
這當前返回的行數與每個日期的代碼一樣多。
您的查詢在語法上不正確。 我認為您想要的邏輯很簡單:
select a.*, data2_1.code as PostCode1, data2_2.code as PostCode2
from data1 a left join
(select d.id, d.date, max(code) as code
from data2 d
group by d.id, d.date
) data2_1
on a.id = data2.id and a.postdate1 = data2.date left join
(select d.id, d.date, max(code) as code
from data2 d
group by d.id, d.date
) data2_2
on a.id = data2.id and a.postdate2 = data2.date;
請注意,您的問題未指定在有多個代碼時如何選擇哪個代碼。 這只是使用最大值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.