Я хочу перечислить все продажи и сгруппировать сумму по дням.
Sales (saleID INT, amount INT, created DATETIME)
Обновление, я использую SQL Server 2005
sql
sql-server
sql-server-2005
group-by
mrblah
источник
источник
Ответы:
если вы используете SQL Server,
dateadd(DAY,0, datediff(day,0, created))
вернет день созданиянапример, если сделка создана «2009-11-02 06: 12: 55.000»,
dateadd(DAY,0, datediff(day,0, created))
верните «2009-11-02 00: 00: 00.000».источник
Для SQL Server:
или быстрее (от Q8-Coder):
Для MySQL:
или лучше (от Джона Брайта):
Для Oracle:
или быстрее (от IronGoofy):
Для Informix (от Джонатана Леффлера):
источник
Если вы используете MySQL:
Если вы используете MS SQL 2008:
источник
на самом деле это зависит от того, какую СУБД вы используете, но в обычном SQL
convert(varchar,DateColumn,101)
изменит формат DATETIME на дату (один день)так:
число magix
101
- это формат даты, в который он конвертируетсяисточник
Если вы используете SQL Server, вы можете добавить три вычисляемых поля в таблицу:
и теперь вы можете легко группировать, упорядочивать и т. д. по дню, месяцу или году продажи:
Эти вычисляемые поля всегда будут обновляться (при изменении даты "Создано"), они являются частью вашей таблицы, их можно использовать так же, как обычные поля, и даже их можно индексировать (если они "ПРОДОЛЖАЮТСЯ" ) - отличная функция, которая полностью не используется, ИМХО.
Марк
источник
Для оракула вы можете
поскольку это усекает созданное datetime до предыдущей полуночи.
Другой вариант заключается в
который дает тот же результат, но может быть медленнее, поскольку требует преобразования типа.
источник
Для PostgreSQL:
или используя cast:
если вам нужна скорость, используйте второй вариант и добавьте индекс:
источник
использовать linq
источник