Cum de a crea o interogare pentru a obține facturi între datele (ajuta la nevoie)

0

Problema

Am nevoie pentru a crea o interogare în SQL pentru a obține unele facturi în funcție de data curentă. Sunt stagiar în cadrul companiei, așa că am nevoie doar pentru a crea logica, nu neapărat de interogare. Poate cineva să mă ajute pentru a traduce această condițiile în SQL (Fulg de nea)?

  • Dacă Data Curentă (data de azi) este între ziua a 14-a și a 27 de luni >>> Ia facturi de la a 14-a zi a lunii curente
  • Dacă Data Curentă (data de azi) este între ziua 28 si 31 ale lunii >>> Ia facturi din ziua de 28 a lunii curente
  • Dacă Data Curentă (data de azi) este între ziua 1 și 13 ale lunii >>> Obține facturi din ziua a 28-a din ultima lună

Multumesc anticipat!

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

Cel mai bun răspuns

2

Cred că cea mai simplă, mai clară opțiune este o declarație caz. Puteți pune acest lucru în selectați și de a lucra cu ea de acolo, sau pune-l direct într-o clauză where. ce e mai potrivit pentru interogare.

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

Revizuit soluție.

Eliminarea inegalităților și reducând problema la multipli de 14 cu luna ajustări în loc de mai multe declarațiile de caz (scumpe pentru a rula la scară).

enter image description here

2021-12-09 11:27:46

acest lucru ar putea lucra, dar codul este destul de criptic pentru mine. E foarte greu pentru mine să se uite la și de a înțelege/a prezice ce valoare se va fi întors pentru o anumită dată. Am, de asemenea, nu vad de ce nu ar rula mai repede, deoarece acesta are nevoie pentru a genera și de a compara toate datele, mai degrabă decât doar unul.
David Garrison

De asemenea, cred că ai nevoie de filtru înainte de a rula GREATEST. Eu nu pot obține acest lucru în mod corect pentru unele date.
David Garrison

Fuge mai repede ca nu e cazul declarații sau inegalitatea predicate. Ai fost corect răspunsul meu anterior nu a fost testat perfect - îmi cer scuze.
Adrian White

În alte limbi

Această pagină este în alte limbi

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