首页 > 解决方案 > 如何在当年返回下一年的值,但在切换到下一年时保持当前值?成为当年

问题描述

我有一个运行用户选择某个月份的视图。它根据月份选择返回各种值。使用 MS SQL 服务器

问题:它根据月份返回这些值,并且在用户选择一月份之前它应该正常工作。When January is chosen, it brings back both this current year (which has already passed) and this upcoming January (January 2020. Which is what they want). 如何在选择明年时删除 2019 年的值,但在年份更改为下一年时仍保留它们?

这是查询

SELECT distinct 
       RRP.Id, RRP.UniqClient, RRP.Client, RRP.Expiring_Policies, RRP.UniqBroker, 
       CONVERT(varchar, RRP.ExpDate, 101) AS ExpDate, RRP.NewUw, RRP.OtherContact, 
       RRP.Company, RRP.Broker_Name, RRP.Reviewed, RRP.DateCreated, RRP.DateUpdated, 
       RRP.EmailCreated, RRP.UniqProducer, RRP.LINES, 
  CASE WHEN MMS.UniqMarketingSubmission IS NULL THEN 'No' ELSE 'Yes' END AS [MMS Created]
  FROM  dbo.Reviewed_Renewal_Policy AS RRP LEFT OUTER JOIN
  GREEN43_PROD_REPL.dbo.MarketingSubmission AS MMS ON RRP.UniqClient = MMS.UniqEntity AND RRP.ExpDate = MMS.EffectiveDate 

  where (RRP.Reviewed = 'No') AND (DATENAME(month, RRP.ExpDate) = DATENAME(MONTH, DATEADD(Month, 3, GETDATE()))) 

  order by ExpDate ASC

通常有一个 .NET webforms 变量代替 DATEADD 中的 3,但 3 在 SQL 中工作,为了清楚起见我保留了它

我尝试过比较当前日期并添加一年,但到目前为止没有成功。再次感谢你的帮助。

标签: sqlsql-server

解决方案


如果您想要未来三个月的价值,我建议:

where RRP.Reviewed = 'No' and
      RRP.ExpDate >= datefromparts(year(dateadd(month, 3, getdate()),
                                   month(dateadd(month, 3, getdate()),
                                   1) and
      RRP.ExpDate < datefromparts(year(dateadd(month, 4, getdate()),
                                   month(dateadd(month, 4, getdate()),
                                   1) 

(Reviewed, ExpDate)注意:这是构造的,因此它可以在or上使用索引(ExpDate)


推荐阅读