SQL 加入的子查询中的服务器 2012 最大日期 table

SQL Server 2012 Max Date in Subquery in a joined table

我管理全州应用程序并使用 Tableau 创建数据可视化。

我的任务是创建一个可视化效果,显示联系人条目与今天(案例注释日期)之间经过了多少时间。我知道如何在案例注释 table:

中隔离最大案例注释日期
Select 
    [Case_Master_ID],
    [Case_Note_Date],
    [Case_Note_Category_Desc],
    [Case_Note_Summary_Narr]
From 
    buCase_Note 
Where 
    Case_Note_Date = (Select MAX(Case_Note_Date)
                      From buCase_Note)

此查询将向我显示 table 从今天开始的最大案例注释。问题是我需要为所有参与者显示最大案例说明,而不仅仅是今天的参与者。我用来查看案例说明的原始查询是:

Select
    vc.[_Case Master ID],
    vc.[_Caseload Assignment Current],
    vc.[_Participant Name],
    vc.[Case Status],
    vc.[Reporting Structure Level 4],
    vc.[Reporting Structure Level 5],
    vc.[Application Date],
    vc.[Eligibility Date],
    vc.[Eligibility Determination Extension Date],
    vc.[Eligibility Extended To Date], 
    vc.[Days in Application],
    cn.[Case_Note_Date], 
    cn.[Case_Note_Category_Desc],
    cn.[Case_Note_Summary_Narr]
From  
    biVR_Cases vc
Left outer Join 
    buCase_Note cn ON cn.Case_Master_ID = vc.[_Case Master ID]

我需要在左侧保留 biVR_Cases 以显示所有打开的客户端。然后我需要加入案例说明 table 并且对于每个参与者,我想显示他们的最大案例说明日期。当我将其添加到上述查询的末尾时:

Where cn.[Case_Note_Date] = (
    Select
        MAX(cn.Case_Note_Date)
    From buCase_Note)

我得到以下错误是 SSMS 2012:

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.

我希望保留左侧的 bi table,同时成功加入案例说明 table 并只为每个参与者带来最新的案例说明。

添加详细信息: 当然, 这是我在 运行 以下查询时获得的数据示例:

Select
 vc.[_Case Master ID],
 vc.[_Caseload Assignment Current],
 vc.[_Participant Name],
cn.[Case_Note_Date],
From  biVR_Cases vc
LEFT outer JOIN buCase_Note cn ON vc.[_Case Master ID] = cn.Case_Master_ID

_Caseload 分配 当前测试参与者姓名 Casenote 日期 测试辅导员参与者A 2010 年 9 月 29 日 2010 年 9 月 23 日 2010 年 8 月 30 日 2010 年 6 月 30 日 2010 年 6 月 1 日

bi table 包含参与者信息,如姓名、申请、案例主 ID 等。casenote table 包含案例主 ID 以及连接。它还包含每个条目的创建日期。因此,对于上面的数据集,我试图只为每个参与者引入最新的案例说明。我在上面的示例中只包括了 1 个,但我们有超过 15,000 个。每个参与者都会有很多案例笔记。我正在尝试获取最重要的案例说明,以便我可以为每个参与者计算最近的案例说明与今天之间的日期差异。当我添加时:

Where cn.[Case_Note_Date] = (Select
top 1 [Case_Note_Date]
From buCase_Note
Order by 1 DESC))
 OR 
Where Case_Note_Date=(
Select
MAX(Case_Note_Date)
From buCase_Note)

它只显示今天创建案例说明的参与者的最高或最大案例说明。我不需要在 casenote table 中显示最大 casenote,而是需要每个参与者的最大 casenote。我希望这更有意义。

MAX(cn.Case_Note_Date) 行中删除 cn.。您不想从主查询中引用列。您只想 select 来自 buCase_NoteCase_Note_Date

所以整个查询将是

Select
 vc.[_Case Master ID],
 vc.[_Caseload Assignment Current],
 vc.[_Participant Name],
 vc.[Case Status],
 vc.[Reporting Structure Level 4],
 vc.[Reporting Structure Level 5],
 vc.[Application Date],
 vc.[Eligibility Date],
 vc.[Eligibility Determination Extension Date],
 vc.[Eligibility Extended To Date], 
 vc.[Days in Application],
 cn.[Case_Note_Date], 
 cn.[Case_Note_Category_Desc],
 cn.[Case_Note_Summary_Narr]
From  biVR_Cases vc
LEFT outer JOIN buCase_Note cn ON cn.Case_Master_ID = vc.[_Case Master ID]
Where cn.[Case_Note_Date] = (Select
MAX(Case_Note_Date)
From buCase_Note)

您可以尝试我在下面包含的内容。没有实际数据,我不知道它对你来说是否足够有效,但它应该有效。但是,如果您有更好的答案,我很想知道。

Select vc.[_Case Master ID],
 vc.[_Caseload Assignment Current],
 vc.[_Participant Name],
 vc.[Case Status],
 vc.[Reporting Structure Level 4],
 vc.[Reporting Structure Level 5],
 vc.[Application Date],
 vc.[Eligibility Date],
 vc.[Eligibility Determination Extension Date],
 vc.[Eligibility Extended To Date], 
 vc.[Days in Application],
 cn.[Case_Note_Date], 
 cn.[Case_Note_Category_Desc],
 cn.[Case_Note_Summary_Narr]
From  biVR_Cases vc
LEFT outer JOIN 
   (SELECT Case_Master_ID, Case_Note_Date, Case_Note_Category_Desc, Case_Note_Summar_Narr, 
           ROW_NUMBER() OVER (PARTITION BY Case_Master_ID ORDER BY Case_Note_Date DESC) as RowNum FROM buCase_Note) cn 
   ON cn.Case_Master_ID = vc.[_Case Master ID] AND cn.RowNum=1