3 Aralık 2020 Perşembe

CROSS JOIN

Giriş
Sol tablodaki her bir satır için sağ tablodaki tüm satırları çaprazlar

Örnek - interval
Elimizde şöyle iki tablo olsun
create table employee (
    id int,
    name char(20),
    division_id int
);

create table attendance (
    id int,
    employee_id int,
    activity_type int,
    created_at timestamp
);
attendance değerlerini günlük olarak görmek istersek şöyle yaparız
SELECT
days::date AS created_date, e.* FROM ( SELECT MIN(created_at), MAX(created_at) FROM attendance) AS r(startdate,enddate),
generate_series( startdate::timestamp, enddate::timestamp, interval '1 day') g(days) CROSS JOIN employee e
Çıktı olarak şunu alırız. Burada her created_day için tüm çalışanları (toplam 5 kişi) teker teker yazdı
created_date id name division_id
2020-11-18 1 John    1
2020-11-18 2 Amber   2
2020-11-18 3 Mike    1
2020-11-18 4 Jimmy   1
2020-11-18 5 Kathy   2
2020-11-19 1 John    1
2020-11-19 2 Amber   2
2020-11-19 3 Mike    1
2020-11-19 4 Jimmy   1
2020-11-19 5 Kathy   2

Hiç yorum yok:

Yorum Gönder