【问题标题】:How can I write a query in SQL Server to capture prior month data?如何在 SQL Server 中编写查询来捕获前一个月的数据?
【发布时间】:2020-04-23 16:35:28
【问题描述】:

我的问题陈述是尝试使用数据集的 max(date) 来捕获上个月的数据。例如,如果我的 MAX(DISCHARGE DATE) = 2020 年 4 月 12 日。

我希望我的查询捕获从 2020 年 3 月 1 日到 2020 年 3 月 31 日的数据。

select [ENC_KEY_MAIN], MAX([Discharge Date]) AS LastActivity 
from vw_HOME_CLINTIGRITY 
group by [ENC_KEY_MAIN] 
having MAX([Discharge Date]) < DATEADD(MM, -3, MAX([Discharge Date])); 

【问题讨论】:

  • 请提供示例数据和您的尝试。

标签: sql-server date


【解决方案1】:

您可以使用 EOMONTH()DATEADD() 作为

DECLARE @MXD DATE = (SELECT EOMONTH(MAX(Col), -1) FROM Table);

SELECT *
FROM Table
WHERE Col <= @MXD
      AND 
      Col >= DATEADD(Day, -(DAY(@MXD)-1), @MXD);

这是db<>fiddle

【讨论】:

  • 我猜该列是DATE 而不是DATETIME
  • @AaronBertrand “我希望我的查询捕获从 2020 年 3 月 1 日到 2020 年 3 月 31 日的数据。” 所以 OP 想要过滤数据
  • 最大(出院日期)根据上传的数据集不断变化。用一个月-yyyy 标记一行然后只选择 max(month) 之前的一个月会更好吗? @AaronBertrand
  • 最大(出院日期)根据上传的数据集不断变化。用一个月-yyyy 标记一行然后只选择 max(month) 之前的一个月会更好吗? @萨米
【解决方案2】:

declare @dt int = select month(max([Discharge Date]))-1 from vw_HOME_CLINTIGRITY

选择 [ENC_KEY_MAIN], DATENAME(MONTH,getdate()-29) 作为 LastActivity 来自 vw_HOME_CLINTIGRITY

其中月份([出院日期])=@dt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多