Existe uma maneira de calcular hoje (e ontem) do mês passado (e ano passado) no SQL?
Supondo que hoje seja 26 de maio de 2015, como encontrar?
- Hoje do ano passado, ou seja, 26 de maio de 2014?
- Hoje do mês passado, ou seja, 26 de abril de 2015?
- Ontem do ano passado, ou seja, 25 de maio de 2014?
- Ontem do mês passado, ou seja, 25 de abril de 2015?
Não deveria realmente precisar de nenhum hack para lidar com anos bissextos, mas depende dos resultados que você espera. Normalmente, você apenas subtrai o componente maior primeiro, então subtraia um mês antes de subtrair um dia, em vez do contrário.
Algum deles produz resultados inesperados? Em caso afirmativo, quais são "errados" para você e por quê?
Você também pode considerar o uso de uma tabela de calendário se quiser lidar com anos bissextos, feriados, fins de semana etc. de maneira diferente. O que você realmente precisa fazer é entender e explicar completamente sua exigência. Com muitos meses tendo 31 dias, e especialmente com anos bissextos, cada combinação possível de "hoje ou ontem último mês ou ano" pode estar aberta a múltiplas interpretações.
Ontem:
Hoje do ano passado:
Hoje do último mês:
Ontem do ano passado:
Ontem do último mês:
Hack adicional para datas ímpares (principalmente anos bissextos):
(Se a data não existir para o ano anterior, use a data anterior a essa)