Разделение значения по количеству дней в месяц в поле даты в таблице SQL

Я работаю над SQL-запросом, который выполняет некоторое арифметическое деление данных в таблице SQL на основе значения в столбце даты.

Чтобы уточнить, у меня есть следующая таблица SQL-предложений

id Date Type Quantity Price 3 2014-11-04 Sweet 2500 23 9 2014-12-04 Sweet 5000 30 10 2014-12-04 Midale 2500 25.4 11 2014-11-04 Sweet 5000 45 

Теперь я хочу выполнить некоторые арифметические операции над столбцом Количество, сгруппированные по типу и дате.

Я использовал следующий запрос

 SELECT Type, COUNT(Id) AS Trades, SUM(Quantity ) AS M3, ROUND((6.2898*SUM(Quantity ))/31,4) AS BBLperDay, CAST(Date as date) AS TradeMonth, ROUND(SUM(Quantity*Price)/Sum(Quantity),4) AS WeightedAverage FROM Deals GROUP BY Type,CAST(Date as date) 

Вышеприведенный запрос возвращает

  Type Trades M3 BBLperDay TradeMonth Sweet 2 7500 1521.7258 2014-11-04 Midale 1 2500 507.2419 2014-12-04 Sweet 1 5000 1014.4839 2014-12-04 

Вышеуказанные результаты верны, но я жестко закодировал число дней как 31 в Дате в выражении

  6.2898*SUM(Quantity )/31 AS BBLperDay 

Есть ли способ, который я могу сделать, просто имеет значение, взятое из столбца Date в зависимости от месяца. Если месяц будет в декабре в столбце «Дата», значение будет автоматически равным 31, так как количество дней в декабре равно 31.

Нет. дней в месяц

 Select DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,getdate()),0))) 

или Если вы используете SQL SERVER 2012+

 Select DAY(EOMONTH(getdate())) 

Измените свой запрос следующим образом.

 SELECT Type, COUNT(Id) AS Trades, SUM(Quantity ) AS M3, ROUND((6.2898*SUM(Quantity ))/DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,TradeMonth),0))),4) AS BBLperDay, CAST(Date as date) AS TradeMonth, ROUND(SUM(Quantity*Price)/Sum(Quantity),4) AS WeightedAverage FROM Deals GROUP BY Type,CAST(Date as date),TradeMonth 
  • Добавить метку времени на SQL Server
  • TSQL DATETIME ISO 8601
  • Как сравнить тип datetime в SQL Server
  • Как конвертировать разные строки в дату
  • SSIS Date / Numeric Conversion из Flatfile
  • SQL Server - как я могу выбрать дату-час из поля даты
  • Как отформатировать дату на MS SQL Server 2008
  • Получать все даты с интервалом в неделю с датой начала и окончания
  • Пожалуйста, подтвердите: SYSDATETIME () работает медленнее, чем GETDATE () в предложении WHERE
  • Как фильтровать результаты до определенного времени
  • MSSQL Наиболее оптимальный запрос для диапазона дат в течение дня или дневного диапазона
  • Давайте будем гением компьютера.