Quero listar todas as vendas e agrupar a soma por dia.
Sales (saleID INT, amount INT, created DATETIME)
Atualização Estou usando o SQL Server 2005
sql
sql-server
sql-server-2005
group-by
mrblah
fonte
fonte
Respostas:
se você estiver usando o SQL Server,
dateadd(DAY,0, datediff(day,0, created))
retornará o dia criadopor exemplo, se a venda criada em '2009-11-02 06: 12: 55.000',
dateadd(DAY,0, datediff(day,0, created))
retorne '2009-11-02 00: 00: 00.000'fonte
Para o SQL Server:
ou mais rápido (do Q8-Coder):
Para o MySQL:
ou melhor (de Jon Bright):
Para Oracle:
ou mais rápido (da IronGoofy):
Para Informix (de Jonathan Leffler):
fonte
Se você estiver usando o MySQL:
Se você estiver usando o MS SQL 2008:
fonte
na verdade, isso depende do DBMS que você está usando, mas no SQL regular
convert(varchar,DateColumn,101)
, o formato DATETIME será alterado para data (um dia)tão:
o número magix
101
é para qual formato de data é convertidofonte
Se você estiver usando o SQL Server, poderá adicionar três campos calculados à sua tabela:
e agora você pode facilmente agrupar, ordenar por etc. por dia, mês ou ano da venda:
Esses campos calculados serão sempre atualizados (quando a data "Criada" for alterada), eles fazem parte da sua tabela, podem ser usados como campos regulares e podem até ser indexados (se estiverem "PERSISTED" ) - ótimo recurso totalmente subutilizado, IMHO.
Marc
fonte
Para oracle você pode
pois isso trunca o datetime criado para a meia-noite anterior.
Outra opção é
que alcança o mesmo resultado, mas pode ser mais lento, pois requer uma conversão de tipo.
fonte
Para o PostgreSQL:
ou usando elenco:
se você deseja velocidade, use a segunda opção e adicione um índice:
fonte
use linq
fonte