Saya memiliki dua tabel bernama master_tbl dan anom_table sebagai berikut:

Master_tbl

 date         id     country    value     
     2017-01-01   26      US        2            
     2017-01-02   26      US        4             
     2017-01-03   26      US        9             
     2017-01-04   26      US        2             
     2017-01-05   26      US        4             
     2017-01-06   26      US        1
     2017-01-07   26      US        5
     2017-01-08   26      US        3
     2017-01-09   26      US        100
     2017-01-10   26      US        4 

Anom_tbl

date         id  country     anoms
 2017-01-01   26      US        0
 2017-01-02   26      US        0
 2017-01-03   26      US        9
 2017-01-04   26      US        0
 2017-01-05   26      US        0
 2017-01-06   26      US        0
 2017-01-07   26      US        0
 2017-01-08   26      US        0
 2017-01-09   26      US        100
 2017-01-10   26      US        0

Saya ingin membuat tabel ketiga dari master_tbl dan bergabung dengan anom_tbl untuk memilih hanya baris yang tanggalnya memiliki nilai di kolom anom dari anom_tbl dan satu hari sebelum dan satu hari setelah tanggal itu dari master_tbl

Akhirnya saya ingin memiliki tabel berikut

date         id  country     value
 2017-01-02   26      US        2
 2017-01-03   26      US        9
 2017-01-04   26      US        4
 2017-01-08   26      US        3
 2017-01-09   26      US        100
 2017-01-10   26      US        4

Karena saya memiliki data besar, saya membutuhkan waktu untuk menjalankannya di R atau python maka saya ingin membuat tabel di AWS (athena)

Saya telah mencoba kode berikut di athena namun tidak berhasil

FROM 
    (SELECT t2.value,
         t1.id,
         t1.country AS country,
         cast(t1.date AS DATE) AS orig_date
    FROM 
        (SELECT id,
         country,
         date
        FROM anom_tbl) t1
        JOIN master_tbl t2
            ON t2.id=t1.id
                AND t2.country= t1.country
                AND t2.date=t1.date) t3
    JOIN master_tbl t2
    ON t3.id=t2.id
        AND t3.country=t2.country 
        where t2.date IN(GETDATE()-1)  

Bisakah Anda membantu saya memodifikasi kode sql untuk mendapatkan hasil yang tepat.

0
user 18 Maret 2020, 00:56

1 menjawab

Jawaban Terbaik

Jika saya mengikuti Anda dengan benar, Anda dapat melakukannya dengan exists:

select m.*
from master_tbl m
where exists (
    select 1
    from anom_tbl a
    where 
        a.anoms <> 0
        and a.id = m.id 
        and a.country = m.country
        and m.date >= a.date - interval '1' day
        and m.date <= a.date + interval '1' day
)

Ini membawa semua catatan di tabel master yang catatan lain ada di tabel anom untuk id dan negara yang sama, dengan nilai non-0, dalam interval +/- 1 hari.

1
GMB 17 Maret 2020, 22:50