Son 30 gündeki etkinlikleri arıyorum

Diğer bir yaygın görev, belirli bir tarih aralığına ait satırları aramaktır. Prensip olarak, aralığın başlangıç ​​ve bitiş tarihleri ​​sabitse bu zor değildir: SQL, sayıların yanı sıra tarihleri ​​de karşılaştırabilir.

Karşılaştırma işleçleri tarihlere uygulanabilir: < , > , <= , vb. Ayrıca, tarihlerle de çalışabilen özel bir BETWEEN işleci vardır. Örneğin 2022 yazında yapılması gereken tüm görevleri görev tablosundan seçecek bir sorgu yazalım. İstek şöyle görünecektir:

SELECT * FROM task  
WHERE task.deadline BETWEEN '2022-06-01' AND '2022-08-31'

Bu sorgunun sonucu şöyle olacaktır:

İD çalışan kimliği isim son teslim tarihi
1 1 Ön uçtaki bir hatayı düzeltin 2022-06-01
2 2 Arka uçtaki bir hatayı düzeltin 2022-06-15
3 5 kahve satın al 2022-07-01
4 5 kahve satın al 2022-08-01

Ancak, örneğin son 30 gün için görevler almak istiyorsak, talebe ne yazmalıyız. Son 30 günün doğrudan sorgu yürütme süresine bağlı olduğu yer. Yani, sorgu 25 Temmuz'da yürütülürse, 25 Haziran ile 24 Temmuz arasında tarihler seçmeniz gerekir. Bir tarih aralığını şimdiki zamana nasıl bağlayabilirim?

Bunu yapmak için tarih ekleme işlevini kullanın:

DATE_ADD (date, INTERVAL expression units)

Birkaç örnekle açıklamak daha kolay olur sanıyorum:

# Rica etmek Sonuç
1 DATE_ADD('2022-06-04', INTERVAL 5 GÜN) 2022-06-09
2 DATE_ADD('2022-06-04', ARALIK 4 HAFTA) 2022-07-02
3 DATE_ADD('2022-06-04', ARALIK 2 AY) 2022-08-04
4
5 DATE_SUB('2022-06-04', ARALIK 5 GÜN) 2022-05-30
6 DATE_SUB('2022-06-04', ARALIK 4 HAFTA) 2022-05-07
7 DATE_SUB('2022-06-04', ARALIK 2 AY) 2022-04-04

Bu arada, belirli sayıda gün, hafta, ay ve yıl da belirli bir tarihten çıkarılabilir.

Son 30 güne ait verileri almak için talebimize geri dönersek, bu aralıkta iki tarihe ihtiyacımız var:

  • CURDATE() - aralığın sonu
  • DATE_SUB( CURDATE() , INTERVAL 30 DAY) - aralığın başlangıcı

İstek şöyle görünecektir:

SELECT * FROM task WHERE task.deadline  
BETWEEN DATE_SUB( CURDATE() , INTERVAL 30 DAY) AND CURDATE() 

Bu sorgunun sonucu şöyle olacak (Bugün 4 Haziran 2022'ye sahibim):

İD çalışan kimliği isim son teslim tarihi
1 1 Ön uçtaki bir hatayı düzeltin 2022-06-01

İki tarih arasındaki fark nasıl bulunur?

Ve başka bir kullanışlı özellik. Bazen iki tarih arasındaki farkı gün cinsinden hesaplamanız gerekebilir. Bunu yapmak için SQL'in özel bir işlevi vardır - DATEDIFF ().

Onunla çalışmak çok kolay:

DATEDIFF (date 1, date 2)

İkinci tarih, ilk tarihten basitçe çıkarılır. Tarih2, tarih1'den sonra gelirse, sonuç negatif olur.

Bu arada, DATEDIFF() fonksiyonunu kullanarak önceki sorgumuzu yeniden yazabiliriz. Son tarihi geçerli tarihten 30 günden fazla farklı olmayan görev tablosundan tüm görevleri seçmemiz gerekiyor. İşte bu isteğin nasıl görüneceği:

SELECT * FROM task WHERE DATEDIFF(task.deadline, CURDATE() ) < 30

Bu sorgunun sonucu şöyle olacak (Bugün 4 Haziran 2022'ye sahibim):

İD çalışan kimliği isim son teslim tarihi
1 1 Ön uçtaki bir hatayı düzeltin 2022-06-01
2 2 Arka uçtaki bir hatayı düzeltin 2022-06-15
3 5 kahve satın al 2022-07-01

Bu sefer, SQL en fazla üç satır buldu. Geçen sefer neden bir satır olduğunu ve bu sefer üç satır olduğunu bir düşünün.