Como criar uma consulta para obter facturas entre datas (ajuda)

0

Pergunta

Eu preciso criar uma consulta em SQL para obter algumas faturas, dependendo da data atual. Eu sou um estagiário na empresa, de modo que eu só preciso para criar a lógica, não necessariamente a consulta. Alguém pode me ajudar a traduzir esse condições em SQL (floco de Neve)?

  • Se a Data Atual (data de hoje) é entre os dias 14 e 27 do mês >>> Chegar faturas a partir do dia 14 do corrente mês
  • Se a Data Atual (data de hoje) é entre os dias 28 e 31 do mês >>> Chegar faturas a partir do dia 28 do corrente mês
  • Se a Data Atual (data de hoje) é entre os dias 1 e 13 do mês >>> Obter faturas a partir do dia 28 do mês passado

Obrigado antecipadamente!

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

Melhor resposta

2

Eu acho que o mais simples e clara, a opção é uma instrução case. Você pode colocar isso em seu selecionar e trabalhar com ele de lá, ou colocá-lo diretamente em uma cláusula where. o que é mais apropriado para a sua 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

Revista de solução.

A remoção das desigualdades e da redução do problema para múltiplos de 14 com o mês ajustes em vez de várias instruções de caso (caro para executar em escala).

enter image description here

2021-12-09 11:27:46

isso pode funcionar, mas o código é muito confusos para mim. É muito difícil para mim olhar para isso e entender/prever qual será o valor a ser retornado para uma dada data. Eu também não consigo ver por que ele iria correr mais rápido, pois precisa gerar e comparar todas as datas, ao invés de apenas um.
David Garrison

Também, eu acho que você precisa de seu filtro antes de executar o GREATEST. Eu não posso chegar a este funcionar corretamente para algumas datas.
David Garrison

É mais rápido, como não há nenhum caso de declarações ou desigualdade de predicados. Estava certo de minha resposta anterior não foi testado perfeitamente desculpas.
Adrian White

Em outros idiomas

Esta página está em outros idiomas

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