Takip et

PostgreSQL: Son 7 Günün Tüm Kayıtlarını Seçme

# PostgreSQL’de Son 7 Günün Verilerini Seçmek

Veri tabanlarıyla çalışan herkesin karşılaştığı yaygın bir problem: belirli bir zaman aralığındaki verileri seçmek. Özellikle günlük işlem kayıtları tutan sistemlerde, son 7 günün verilerini hızlı ve verimli bir şekilde sorgulamak hayati önem taşır. Bu makalede, PostgreSQL kullanarak son 7 günün verilerini nasıl seçebileceğinizi adım adım, yeni başlayanlardan uzmanlara kadar herkesin anlayabileceği şekilde açıklayacağız. Farklı senaryoları, performans optimizasyon tekniklerini ve olası sorunları ele alarak, PostgreSQL’deki zaman tabanlı sorgulara dair kapsamlı bir rehber sunacağız.

PostgreSQL Zaman Fonksiyonları: Temel Kavramlar

PostgreSQL, tarihler ve zamanlarla çalışmak için güçlü fonksiyonlar sunar. Bu fonksiyonları anlamak, son 7 günün verilerini seçmek için kritik öneme sahiptir. En önemli fonksiyonlardan bazıları şunlardır:

* NOW(): Mevcut tarihi ve saati döndürür.
* CURRENT_DATE: Mevcut tarihi döndürür.
* CURRENT_TIME: Mevcut saati döndürür.
* DATE(): Tarih ve saat değerinden sadece tarih kısmını döndürür.
* INTERVAL: Tarih ve zamana belirli bir süre eklemek veya çıkarmak için kullanılır (örneğin, INTERVAL '7 days' yedi gün).

Bu fonksiyonları kullanarak, son 7 günün başlangıç ve bitiş tarihlerini hesaplayabilir ve sorgularımızda kullanabiliriz.

Son 7 Günün Verilerini Seçme: Adım Adım Uygulamalı Kılavuz

Öğrenme Yol Haritası:

Yeni Başlayan:

Adım 1: Basit bir tablo oluşturalım.

CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    order_date TIMESTAMP WITH TIME ZONE,
    amount NUMERIC
);

Adım 2: Tabloya bazı örnek veriler ekleyelim.

INSERT INTO orders (order_date, amount) VALUES
('2024-10-26 10:00:00', 100),
('2024-10-27 15:30:00', 200),
('2024-10-28 09:15:00', 150),
('2024-10-30 12:45:00', 250),
('2024-11-01 11:00:00', 300);

Adım 3: Son 7 günün verilerini seçelim.

SELECT *
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';

Bu sorgu, order_date sütunundaki tarih ve saatin, mevcut tarihten 7 gün önceki tarihten büyük veya eşit olduğu kayıtları seçer.

Orta Seviye:

Gerçek Hayat Örneği: Bir e-ticaret sitesinin günlük satışlarını takip eden bir tablo düşünelim. Bu tabloda, her satışı temsil eden bir kayıt bulunur ve sale_date adlı bir sütun satışın yapıldığı tarihi tutar. Son 7 günlük satış toplamını hesaplamak için aşağıdaki sorguyu kullanabiliriz:

SELECT SUM(amount) AS total_sales
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '7 days';

Optimizasyon İpuçları: order_date sütununa bir indeks eklemek, sorgunun performansını önemli ölçüde artırabilir. Aşağıdaki komutla indeks oluşturabilirsiniz:

CREATE INDEX idx_order_date ON orders (order_date);

İleri Düzey:

Performans Analizi: Büyük veri kümeleri için, sorguların performansını analiz etmek ve optimize etmek önemlidir. PostgreSQL’in EXPLAIN komutu, sorgunun yürütme planını gösterir ve performans darboğazlarını belirlemeye yardımcı olur. Örneğin:

EXPLAIN SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL '7 days';

Edge Case’ler: Zaman dilimlerinin farklılıkları, beklenmedik sonuçlara yol açabilir. TIMESTAMP WITH TIME ZONE veri tipi kullanarak zaman dilimlerini doğru bir şekilde yönetmek önemlidir. Farklı zaman dilimlerindeki verilerle çalışırken, AT TIME ZONE fonksiyonunu kullanarak verileri belirli bir zaman dilimine dönüştürebilirsiniz.

Son 7 Günün Verilerini Seçme: Gelişmiş Teknikler ve Senaryolar

# Zamana Dayalı Filtreleme: Daha Fazla Esneklik

Yukarıdaki örneklerde, tam olarak son 7 günü kapsayan bir filtre kullandık. Ancak, daha spesifik filtrelemelere ihtiyaç duyabileceğiniz durumlar olabilir. Örneğin, son 7 günün sadece belirli bir saat aralığını (örneğin, sadece sabah saatlerindeki verileri) seçmek isteyebilirsiniz. Bu durumda, BETWEEN operatörü ve TIME fonksiyonunu birleştirebilirsiniz:

SELECT *
FROM orders
WHERE order_date BETWEEN NOW() - INTERVAL '7 days' AND NOW()
  AND EXTRACT(HOUR FROM order_date) BETWEEN 9 AND 12; -- 09:00 - 12:00 arası

Bu sorgu, son 7 gün içinde saat 09:00 ile 12:00 arasında yapılan siparişleri seçer.

# Hafta İçi ve Hafta Sonu Verilerinin Ayrılması

İşletme analizi için, hafta içi ve hafta sonu verilerini ayrı ayrı incelemek faydalı olabilir. PostgreSQL’in EXTRACT fonksiyonu ile DOW (day of week) kullanarak bunu yapabilirsiniz:

SELECT
    CASE
        WHEN EXTRACT(DOW FROM order_date) BETWEEN 1 AND 5 THEN 'Hafta İçi'
        ELSE 'Hafta Sonu'
    END AS gun_turu,
    SUM(amount) AS toplam_tutar
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days'
GROUP BY gun_turu;

Bu sorgu, son 7 günün verilerini hafta içi ve hafta sonu olarak gruplandırarak her bir grup için toplam satış miktarını hesaplar. (Not: EXTRACT(DOW FROM order_date) 0 (Pazar) ile 6 (Cumartesi) arasında bir değer döndürür.)

# Performans Optimizasyonu: İndeks Kullanımı ve Planlama

Büyük veri kümeleriyle çalışırken, sorgu performansı kritik önem taşır. order_date sütununa bir indeks eklemek, özellikle WHERE koşulunda bu sütunu kullanan sorguların performansını önemli ölçüde artırabilir. Daha önce de belirttiğimiz gibi, CREATE INDEX komutu ile indeks oluşturabilirsiniz. Ayrıca, EXPLAIN komutu ile sorgunun yürütme planını inceleyerek, performans darboğazlarını tespit edebilir ve sorguyu optimize edebilirsiniz. Örneğin, indeks kullanımıyla ilgili sorunlar varsa, PostgreSQL’in indeks kullanımını optimize etmek için çeşitli ayarları vardır. Bunları araştırmak ve doğru ayarları bulmak, sorgu performansını iyileştirmenize yardımcı olacaktır.

Sonuç

PostgreSQL, son 7 günün verilerini seçmek için esnek ve güçlü fonksiyonlar sunmaktadır. Bu makalede ele aldığımız örnekler ve teknikler, farklı senaryolara uygulanabilir ve performans optimizasyonu için ipuçları vermiştir. Ancak, her veri kümesi ve uygulama farklı olduğundan, en uygun yaklaşımı belirlemek için kendi verileriniz üzerinde testler yapmanız önemlidir. Veri tabanınızı ve sorgularınızı iyileştirmek için [fatihsoysal.com](https://fatihsoysal.com) adresindeki diğer makalelere de göz atabilirsiniz.

Sıkça Sorulan Sorular:

1. TIMESTAMP ve TIMESTAMP WITH TIME ZONE arasındaki fark nedir? TIMESTAMP WITH TIME ZONE, zaman dilimini saklarken TIMESTAMP sadece tarihi ve saati saklar. Zaman dilimi önemliyse TIMESTAMP WITH TIME ZONE kullanılmalıdır.

2. Son 7 gün yerine son X günün verilerini nasıl seçerim? INTERVAL '7 days' yerine INTERVAL 'X days' kullanın, burada X istediğiniz gün sayısıdır.

3. Çok büyük bir tabloda son 7 günün verilerini seçmek performansı nasıl etkiler? Performans düşüşünü önlemek için order_date sütununa indeks ekleyin ve EXPLAIN komutu ile sorguyu optimize edin.

4. Zaman aralığına göre verileri nasıl gruplandırırım? GROUP BY ve DATE_TRUNC fonksiyonlarını kullanarak zaman aralıklarına göre gruplandırma yapabilirsiniz.

5. Zaman dilimi dönüşümleri nasıl yapılır? AT TIME ZONE fonksiyonunu kullanarak verileri belirli bir zaman dilimine dönüştürebilirsiniz.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.