Cómo crear una consulta para obtener las facturas entre fechas (se necesita ayuda)

0

Pregunta

Necesito crear una consulta en SQL para obtener algunas facturas dependiendo de la fecha actual. Soy pasante en la empresa, por lo que sólo se necesita para crear la lógica, no necesariamente la consulta. Alguien me puede ayudar a traducir esta condiciones en SQL (Copo de nieve)?

  • Si la Fecha Actual (fecha de hoy) es entre el día 14 y el 27 del mes >>> Obtener las facturas a partir del día 14 del mes en curso
  • Si la Fecha Actual (fecha de hoy) es entre el día 28 y 31 del mes >>> Obtener las facturas a partir del día 28 del mes en curso
  • Si la Fecha Actual (fecha de hoy) es entre el día 1 y 13 del mes >>> Obtener facturas a partir del día 28 del mes pasado

Gracias de antemano!

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

Mejor respuesta

2

Creo que su forma más simple, la más clara opción es una declaración de caso. Usted puede poner esto en su seleccionar y trabajar desde allí, o ponerlo directamente en una cláusula where. lo que sea más apropiado para tu consulta.

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

Revisado solución.

La eliminación de las desigualdades y reducir el problema a múltiplos de 14 con mes los ajustes en lugar de múltiples casos de declaraciones (caro para ejecutar a escala).

enter image description here

2021-12-09 11:27:46

esto podría funcionar, pero el código es bastante críptico para mí. Es muy difícil para mí ver esto y entender y predecir qué valor va a ser devuelto para una determinada fecha. También no puedo ver por qué se iba a correr más rápido ya que se necesita generar y comparar todas las fechas en lugar de sólo uno.
David Garrison

También, creo que usted necesita el filtro previo a la ejecución de la GREATEST. Yo no puedo conseguir que esto funcione correctamente para algunas fechas.
David Garrison

Se ejecuta más rápido, ya que no es el caso de las declaraciones o de la desigualdad de los predicados. Ustedes estaban en lo correcto mi respuesta anterior no se ha probado perfectamente disculpas.
Adrian White

En otros idiomas

Esta página está en otros idiomas

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