【问题标题】:Join With Sub query Joining Specific IDJoin With Sub 查询 Joining Specific ID
【发布时间】:2020-01-21 02:16:31
【问题描述】:

我想要实现的是让每个实例的前 1 个 CLM000ID CLMSTSID 等于 3。 我假设在下面的情况下,无论 CLM00ID 是什么,它都会加入前 1 名。 我怎样才能做到这一点?

表格是这样的

CLM000ID    |     CLMSTSID
1                  2
1                  3
2                  3



LEFT JOIN UC00LCNTRY0 cntry ON drs.CNTRY0ID=cntry.CNTRY0ID
LEFT JOIN (SELECT TOP 1 CLM000ID,LSTPDTS 
            FROM UC07DCLSTTR 
            WHERE CLMSTSID=3
            ORDER BY LSTPDTS DESC) dtclsd ON dtclsd.CLM000ID=c.CLM000ID
LEFT JOIN UC10DSR0000 clmf ON clmf.SR0000ID=c.CLMSFCRID

【问题讨论】:

  • 每个实例是什么?更多的样本数据、期望的结果、解释和适当的数据库标签都会有所帮助。您的代码(至少)提到了三个表,而您还没有解释它们。

标签: sql join subquery


【解决方案1】:

如果您尝试在子查询中执行此操作,那么您需要 OUTER APPLY:

LEFT JOIN
UC00LCNTRY0 cntry
ON drs.CNTRY0ID = cntry.CNTRY0ID OUTER APPLY
(SELECT TOP 1 CLM000ID,LSTPDTS 
 FROM UC07DCLSTTR dc
 WHERE dc.CLM000ID = c.CLM000ID AND
       dc.CLMSTSID = 3
 ORDER BY LSTPDTS DESC
) dtclsd 

【讨论】:

  • 谢谢戈登。你能解释一下 Outer APPLY 是做什么的吗?
  • @Camus 。 . .从技术上讲,它实现了一个横向连接。更实际的是,它就像一个相关子查询,可以返回多列、多行,并且位于FROM 子句中。
【解决方案2】:

使用max() 聚合函数而不是获取top 记录。

LEFT JOIN UC00LCNTRY0 cntry ON drs.CNTRY0ID=cntry.CNTRY0ID
LEFT JOIN (SELECT MAX(CLM000ID) CLM000ID, LSTPDTS 
            FROM UC07DCLSTTR 
            WHERE CLMSTSID=3 AND CLM000ID=c.CLM000ID
            GROUP BY LSTPDTS) dtclsd ON dtclsd.CLM000ID = c.CLM000ID
LEFT JOIN UC10DSR0000 clmf ON clmf.SR0000ID=c.CLMSFCRID

【讨论】:

  • 对不起,我不是很清楚。例如,如果 CLM000ID 的顶部是 2,那么我不想加入。几乎 3 表示特定状态(关闭)。该表用作跟踪表。所以它可以从 3 变为 2,反之亦然。抓到最大值并不表示当前状态为关闭
【解决方案3】:

我相信我找到了实现此目的的方法,但使用 ROW_NUMBER() OVER

SELECT CLM000ID, CLMSTSID, LSTPDTS, ROW_NUMBER() OVER (partition by CLM000ID ORDER BY LSTPDTS DESC)
            FROM UC07DCLSTTR 
            WHERE CLMSTSID=3 
            and CLM000ID in (18)--(2,5,6,10,12,13,15,16,17,20,21,22,24,25,26,27,29,18)          
            ORDER BY LSTPDTS DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多