Pergunta simples, mas não encontrei nenhum exemplo disso no Stack Exchange:
Preciso poder selecionar todos os registros do ciclo de faturamento atual, só isso. O problema é que o ciclo de faturamento não começa no primeiro dia do mês, então não posso simplesmente fazer isso MONTH(date) = MONTH(CURRENT_DATE())
. Posso comparar as partes da data individualmente, mas lidar com o envolvimento por meses e anos é uma dor. Por exemplo, se o ciclo de faturamento começar no dia 15 de cada mês, a partir da data de publicação, a data será 2023-11-15
, e não 2023-12-15
. E daqui a um mês, seria um mês e2023-12-15
ano diferente da data atual.
Como o SQL fica longo e confuso apenas ao lidar com esse filtro, gostaria de gerar o início da última data de faturamento uma vez e comparar a data inteira diretamente com ela, mas estou tendo problemas para juntar isso. por exemplo WHERE date >= '2023-11-15'
(mas gerando esta data dinamicamente). Subtrair INTERVAL 1 MONTH
para obter o mês de início do ciclo de faturamento não funciona, pois isso só acontece se for anterior ao dia do ciclo de faturamento do mês atual. Existe uma maneira elegante de calcular o nth
dia mais recente do mês no MySQL/MariaDB, seja esse dia no mês atual ou no anterior?