Получить записи текущего года из представления в SQL Server

#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())