簡體   English   中英

sql - 使用條件過濾,因此每個日期只有一行

[英]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 | . 

我想合並它們,以便PostCode1PostCode2只有一個值。 它會是這樣的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM