Giriş
Belirtilen iki aralık arasında değer dizisi üretir. Tabloyu doldurmak/populate için kullanılabilir
Örnek
Tabloyu doldurmak için şöyle yaparız.
Örnek - interval-- Sample table with 1 million rows
CREATE TABLE large_table (
id INT,
name VARCHAR(50),
address VARCHAR(100)
);
-- Insert 1 million rows
INSERT INTO large_table
SELECT id,
concat('Name ', id),
concat('Address ', id)
FROM generate_series(1, 1000000) AS id;
Elimizde şöyle iki tablo olsun
attendance değerlerini günlük olarak görmek istersek şöyle yaparız. FROM içindeki SELECT cümlesinde attendance tablosundaki en küçük ve en büyük created_at değerleri alınıyor. Bu değerler generate_series()'e veriliyor. Bu çağrı sonucunda g g(days) ile days isimli bir tablo oluşturuluyor. Bu tablonun date isimli bir sütunu var. Dışarıdaki SELECT içinde bu sütuna erişiliyor.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);
Çıktı olarak şunu alırızSELECTdays::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
created_date id name division_id2020-11-18 1 John 12020-11-18 2 Amber 22020-11-18 3 Mike 12020-11-18 4 Jimmy 12020-11-18 5 Kathy 22020-11-19 1 John 12020-11-19 2 Amber 22020-11-19 3 Mike 12020-11-19 4 Jimmy 12020-11-19 5 Kathy 2
Örnek
Şöyle yaparız. Bu sefer belirtilen iki tarih arasında 1 günlük aralıklar oluşturuluyor
SELECTd::date AS created_date,e.id,e.company_id,e.division_idFROM(SELECT MIN(date '2020-11-23'), MAX(date '2020-11-24') FROM employee_table)
AS r(startdate,enddate),generate_series(startdate::timestamp,enddate::timestamp,interval '1 day') g(d)CROSS JOIN employee_table e
Hiç yorum yok:
Yorum Gönder