Как сделать сумму 90 дней и 91 день в високосный год в sql server

#sql-server

#sql-сервер

Вопрос:

Имя моей таблицы — C_Payment_Service_Fee, а таблица содержит данные, которые приведены ниже

 select top 10 * from c_payment_service_fee
amount        crn_dt                payment_mode
19.99   2015-08-11 23:06:58.877         CC
19.99   2015-05-11 13:30:59.603         CC
39.95   2016-06-29 10:26:09.380         CC
29.99   2015-09-13 22:22:57.703         CC
24.99   2016-04-15 14:59:22.130         CC
22.49   2014-08-29 15:09:39.230         CC
24.99   2013-01-15 15:51:22.097         CC
26.95   2016-07-06 10:26:04.507         CC
14.99   2011-12-15 17:53:17.527         CC
15.99   2014-04-09 11:51:27.377         CC
  

Теперь мне нужно суммировать (сумма) с 01 января по 31 марта каждого года.

Комментарии:

1. Каков ожидаемый результат

2. что вы подразумеваете под суммой? не могли бы вы быть более понятными?

3. вы можете получить «квартал», скорректированный на високосные годы по формуле (месяц (dob) — 1) / 3 1 В моем случае датой является dob, но вы можете подключить любую дату — сообщите нам, если есть какие-либо другие факторы, которые вы рассматриваете здесь — возможно, вы хотитезнаете, сколько дней в любом заданном «квартале»?

4. Я отредактировал свой вопрос…. Я надеюсь, что это будет полезно

5. @VinayakaN — Как определить month .

Ответ №1:

 DATEDIFF(dd, @from, @to)
  

Это даст вам количество дней между двумя датами

Комментарии:

1. Если я использую функцию datediff, я должен указать дату вручную….. Я не должен вводить вручную, это должно быть автоматически…….

Ответ №2:

как насчет

 SELECT SUM(amount) as FirstQamount 
                     FROM  C_Payment_Service_Fee
                            WHERE MONTH(crn_dt) IN (1,2,3)
  

это приближает вас к этому?

Ответ №3:

Формулировка «каждый год» немного неясна — я не могу сказать, хотите ли вы, чтобы они были сгруппированы по годам или нет.

Если вы просто хотите, чтобы все суммы за январь-март были одной единовременной суммой:

 SELECT SUM(amount) AS total_amount
FROM c_payment_service_fee
WHERE MONTH(crn_dt) BETWEEN 1 AND 3;
  

Если вы хотите просмотреть итоги за январь-март для каждого года отдельно, добавьте год и предложение GROUP BY:

 SELECT SUM(amount) AS total_amount, YEAR(crn_dt) as crn_yr
FROM c_payment_service_fee
WHERE MONTH(crn_dt) BETWEEN 1 AND 3
GROUP BY YEAR(crn_dt);
  

Имейте в виду, что функция MONTH() в предложении WHERE сделает запрос не подлежащим обработке. SQL Server не сможет оценить предложение WHERE, не извлекая каждое значение crn_dt, а затем запустив для них MONTH() . Чем больше базовая таблица, тем хуже будет снижение производительности из-за отсутствия совместимости.