Jak utworzyć kwerendę w celu uzyskania faktur między datami (potrzebna pomoc)

0

Pytanie

Muszę utworzyć zapytanie w SQL, aby uzyskać niektóre faktury w zależności od bieżącej daty. Jestem stażystką w firmie, więc trzeba tylko stworzyć logikę, a nie koniecznie zapytanie. Czy może ktoś mi pomóc przetłumaczyć te warunki na SQL (płatek Śniegu)?

  • Jeśli bieżąca data (dzisiejsza data) znajduje się pomiędzy 14 a 27 dzień miesiąca >>>>>> Otrzymywać faktury vat z 14 dnia bieżącego miesiąca
  • Jeśli bieżąca data (dzisiejsza data) znajduje się między 28 a 31 dniem miesiąca >>>>>> Otrzymywać faktury z dnia 28 bieżącego miesiąca
  • Jeśli bieżąca data (dzisiejsza data) znajduje się między 1-m i 13 m dniami miesiąca >>>>>> Otrzymywać faktury od 28 - go dnia ostatniego miesiąca

Z góry dziękuję!

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

Najlepsza odpowiedź

2

Myślę, że najbardziej prosty i intuicyjny opcja to referowanie sprawy. Możesz umieścić to w swój wybór i z nim pracować stamtąd lub umieścić go bezpośrednio w klauzuli where. wszystko, co pasuje do twojego zapytania.

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

Zmienione rozwiązanie.

Rozwiązywanie nierówności i redukcja problemu do wielokrotności 14 z korekt za miesiąc, a nie kilka wniosków o przypadkach (drogie w celu powiększenia).

enter image description here

2021-12-09 11:27:46

to może zadziałać, ale kod jest dla mnie dość tajemniczy. Trudno mi na to spojrzeć i zrozumieć/przewidzieć, jaka wartość zostanie zwrócona na określony dzień. Ja też nie rozumiem, dlaczego to będzie działać szybciej, tak jak mu trzeba wygenerować i porównać wszystkie daty, a nie tylko jedną.
David Garrison

Poza tym, myślę, że potrzebny jest filtr przed uruchomieniem GREATEST. Nie mogę sprawić, by to działać prawidłowo w przypadku niektórych dat.
David Garrison

Działa szybciej, tak jak nie ma instrukcji case lub predykatów nierówności. Masz rację, mój poprzedni odpowiedź nie została sprawdzona idealnie - przepraszam.
Adrian White

W innych językach

Ta strona jest w innych językach

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