Estou escrevendo uma consulta na qual preciso obter os dados apenas do ano passado. Qual é a melhor maneira de fazer isso?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
sql
sql-server
database
tsql
Josh Mein
fonte
fonte
Encontrei esta página enquanto procurava uma solução que me ajudasse a selecionar os resultados de um ano anterior. A maioria dos resultados mostrados acima parece retornar itens dos últimos 365 dias, o que não funcionou para mim.
Ao mesmo tempo, ele me deu orientação suficiente para resolver minhas necessidades no código a seguir - que estou postando aqui para qualquer outra pessoa que tenha a mesma necessidade que a minha e que possa encontrar esta página em busca de uma solução.
Agradeço àqueles acima cujas soluções me ajudaram a chegar ao que eu precisava.
fonte
Bem, eu acho que algo está faltando aqui. O usuário deseja obter dados do ano passado e não dos últimos 365 dias. Existe uma grande diferença. Na minha opinião, os dados do ano passado são todos os dados de 2007 (se eu estiver em 2008 agora). Portanto, a resposta certa seria:
Então, se você quiser restringir esta consulta, pode adicionar algum outro filtro, mas sempre pesquisando no último ano.
fonte
Pesquisar dateadd no BOL
fonte
O mais legível, IMO:
Qual:
Existem variantes com DATEDIFF e DATEADD para obter a meia-noite de hoje, mas tendem a ser um tanto obtusas (embora ligeiramente melhores no desempenho - não que você notaria em comparação com as leituras necessárias para obter os dados).
fonte
GETDATE () retorna a data e hora atuais .
Se o ano passado começar à meia-noite do dia atual do ano passado (como no exemplo original), você deve usar algo como:
fonte
As outras sugestões são boas se você tiver "somente SQL".
No entanto, sugiro que - se possível - você calcule a data em seu programa e insira-a como string na consulta SQL.
Pelo menos para tabelas grandes (ou seja, vários milhões de linhas, talvez combinadas com junções), isso proporcionará uma melhoria considerável na velocidade, já que o otimizador pode trabalhar muito melhor com isso.
fonte
argumento para a função DATEADD:
parte da data pode ser: aa, qq, mm, dy, dd, wk, dw, hh, mi, ss, ms
número é uma expressão que pode ser resolvida para um int que é adicionado a uma parte da data
data é uma expressão que pode ser resolvida para um valor de hora, data, smalldatetime, datetime, datetime2 ou datetimeoffset.
fonte
fonte
Eu, como @DE White, vim aqui por razões semelhantes, mas diferentes da pergunta original. A pergunta original diz respeito aos últimos 365 dias. A resposta de @samjudson fornece isso. A resposta de @DE White retorna os resultados do ano anterior.
Minha consulta é um pouco diferente porque funciona para o ano anterior e inclui a data atual:
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
Por exemplo, em 17 de fevereiro de 2017, esta consulta retorna resultados de 01/01/2016 a 17/02/2017
fonte
Tive um problema semelhante, mas o codificador anterior fornecia apenas a data no formato mm-aaaa. Minha solução é simples, mas pode ser útil para alguns (eu também queria ter certeza de que os espaços iniciais e finais foram eliminados):
fonte
Por alguma razão, nenhum dos resultados acima funcionou para mim.
Isso seleciona os últimos 365 dias.
fonte