#sql-server
#sql-сервер
Вопрос:
У меня есть представление с именем vwMemberPolicyInfo
, и мне нужно отобразить все записи, введенные в текущем году.
Мой запрос :
select
EffectiveDate AS [Month],
count(MemberID) AS Agents,
sum(ActualPremium) AS Premium
from
vwMemberPolicyInfo
Where
EffectiveDate > DATEADD(year, -1, GETDATE())
GROUP BY
EffectiveDate
но это не работает нормально, это показывает результат:
2010-11-01 00:00:00.000 74 40644.00
2010-07-01 00:00:00.000 86 50418.00
2011-03-08 00:00:00.000 1 744.00
2011-04-08 00:00:00.000 1 0.00
2010-11-02 00:00:00.000 5 2676.00
2011-04-14 00:00:00.000 1 1185.00
2011-02-28 00:00:00.000 7 2988.00
2011-02-23 00:00:00.000 8 8518.00
2011-04-10 00:00:00.000 1 1332.00
2011-04-07 00:00:00.000 3 2544.00
Для отображения мне нужны только записи текущего года .. заранее спасибо
Ответ №1:
Попробуйте where YEAR(EffectiveDate) = YEAR(GETDATE())
Надеюсь, это поможет.
Комментарии:
1. да, это работает нормально, т.Е. year (effectivedate)=year(getdate())
Ответ №2:
SELECT MONTH(EffectiveDate) AS [Month],
count(MemberID) AS Agents,
sum(ActualPremium) AS Premium
FROM vwMemberPolicyInfo
WHERE EffectiveDate >= DATEADD(year, YEAR(GETDATE()) - 1, CAST('0001-01-01' AS DATE))
AND EffectiveDate < DATEADD(year, YEAR(GETDATE()), CAST('0001-01-01' AS DATE))
GROUP BY
MONTH(EffectiveDate)
Комментарии:
1. 1 За ответ, который может использовать индекс (и статистику столбцов) на
EffectiveDate
Ответ №3:
Он работает просто отлично — он делает именно то, что вы ему сказали — он возвращает вам все строки, которые находятся между сегодняшним днем и годом назад (например, между 15 апреля 2011 и 15 апреля 2010)
Чего вы, вероятно, хотите достичь, это что-то вроде этого:
SELECT
EffectiveDate AS [Month],
COUNT(MemberID) AS Agents,
SUM(ActualPremium) AS Premium
FROM
dbo.vwMemberPolicyInfo
WHERE
YEAR(EffectiveDate) = 2011
GROUP BY
EffectiveDate
Это вернет только строки за 2011 год.
Ответ №4:
выберите
дату вступления В силу КАК [Месяц], количество (MemberID) В КАЧЕСТВЕ агентов, сумму (ActualPremium) В КАЧЕСТВЕ премии из vwMemberPolicyInfo, где dateadd(year,0,EffectiveDate) = DATEADD(year, 0, GETDATE()) ГРУППИРОВАТЬ По EffectiveDate
dateadd(year,0,EffectiveDate) = DATEADD(year, -1, GETDATE())
dateadd(year,-1,EffectiveDate) = DATEADD(year, -1, GETDATE())