Tarihler arasında fatura almak için bir sorgu nasıl oluşturulur (yardıma ihtiyaç duyulur)

0

Soru

Geçerli tarihe bağlı olarak bazı faturalar almak için sql'de bir sorgu oluşturmam gerekiyor. Ben şirkette stajyerim, bu yüzden sadece mantığı oluşturmam gerekiyor, mutlaka sorguyu değil. Herkes bu koşulları Sql'e (Snowflake) çevirmeme yardımcı olabilir mi?

  • Geçerli Tarih (bugünün tarihi) ayın 14. ve 27. günleri arasındaysa > > > > > > Alın cari ayın 14. gününden itibaren faturalar
  • Geçerli Tarih (bugünün tarihi) ayın 28. ve 31. günleri arasındaysa > > > > > > Alın cari ayın 28. gününden itibaren faturalar
  • Geçerli Tarih (bugünün tarihi) ayın 1. ve 13. günleri arasındaysa >>>>>> Fatura al geçen ayın 28. gününden itibaren

Şimdiden teşekkürler!

snowflake-cloud-data-platform sql
2021-11-23 17:55:26
2

En iyi cevabı

2

Bence en basit, en açık seçeneğiniz dava beyanıdır. Bunu seçiminize koyabilir ve oradan onunla çalışabilir veya doğrudan bir where yan tümcesine koyabilirsiniz. sorgunuz için hangisi daha uygunsa.

WHERE invoice_date::DATE = (CASE WHEN DAY(current_date) between 14 and 27 then DATE_FROM_PARTS(YEAR(current_date), MONTH(current_date), 14)
                                 WHEN DAY(current_date) between 28 and 31 then DATE_FROM_PARTS(YEAR(current_date), MONTH(current_date), 28)
                                 WHEN DAY(current_date) between 1 and 13  then DATEADD('month', -1, DATE_FROM_PARTS(YEAR(current_date), MONTH(current_date), 28))
                                 END)
2021-11-23 18:04:49
0
select  
   current_date()+1 your_date
   ,dateadd(day,27-(sign(FLOOR(day(your_date)/14,0))*14) 
     ,dateadd(month,sign(FLOOR(day(your_date)/14,0))-1 
     ,date_trunc(month,your_date))) your_result

Gözden geçirilmiş çözüm.

Eşitsizlikleri ortadan kaldırmak ve sorunu birden fazla vaka ifadesi yerine ay ayarlamaları ile 14'ün katlarına düşürmek (ölçekte çalıştırılması pahalı).

enter image description here

2021-12-09 11:27:46

bu işe yarayabilir, ama kod benim için oldukça şifreli. Buna bakmak ve belirli bir tarih için hangi değerin iade edileceğini anlamak/tahmin etmek benim için çok zor. Ayrıca, yalnızca bir tane yerine tüm tarihleri oluşturması ve karşılaştırması gerektiğinden neden daha hızlı çalışacağını da göremiyorum.
David Garrison

Ayrıca, çalıştırmadan önce filtrenize ihtiyacınız olduğunu düşünüyorum GREATEST. Bazı randevularda bunun düzgün çalışmasını sağlayamıyorum.
David Garrison

Vaka ifadeleri veya eşitsizlik yüklemleri olmadığı için daha hızlı çalışır. Haklıydın, önceki cevabım mükemmel bir şekilde test edilmedi-özür dilerim.
Adrian White

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................