Quiero enumerar todas las ventas y agrupar la suma por día.
Sales (saleID INT, amount INT, created DATETIME)
Actualización Estoy usando SQL Server 2005
sql
sql-server
sql-server-2005
group-by
mrblah
fuente
fuente
Respuestas:
si estás usando SQL Server,
dateadd(DAY,0, datediff(day,0, created))
devolverá el día creadopor ejemplo, si la venta se creó el '2009-11-02 06: 12: 55.000',
dateadd(DAY,0, datediff(day,0, created))
devuelva '2009-11-02 00: 00: 00.000'fuente
Para SQL Server:
o más rápido (desde Q8-Coder):
Para MySQL:
o mejor (de Jon Bright):
Para Oracle:
o más rápido (de IronGoofy):
Para Informix (por Jonathan Leffler):
fuente
Si estás usando MySQL:
Si está utilizando MS SQL 2008:
fuente
en realidad esto depende de qué DBMS esté usando, pero en SQL regular
convert(varchar,DateColumn,101)
cambiará el formato DATETIME a la fecha (un día)entonces:
el número magix
101
es a qué formato de fecha se conviertefuente
Si está utilizando SQL Server, puede agregar tres campos calculados a su tabla:
y ahora puede agrupar fácilmente, ordenar por etc. por día, mes o año de la venta:
Esos campos calculados siempre se mantendrán actualizados (cuando cambie la fecha "Creado"), son parte de su tabla, se pueden usar como los campos normales e incluso se pueden indexar (si están "PERSISTADOS" ) - gran característica que está totalmente subutilizada, en mi humilde opinión.
Bagazo
fuente
Por oráculo puedes
ya que esto trunca la fecha y hora creada a la medianoche anterior.
Otra opción es
que logra el mismo resultado, pero puede ser más lento ya que requiere una conversión de tipo.
fuente
Para PostgreSQL:
o usando el elenco:
si quieres velocidad, usa la segunda opción y agrega un índice:
fuente
usar linq
fuente