繁体   English   中英

如何在SQL Server中使用行数据为每个(记录ID)获取唯一的最大或最大(版本ID)值

[英]How do I get the unique maxium or greatest (version ID) value to each (Record ID) with row data in sql server

在SQL Server中,我要联接2个表,并且需要一种方法来获取表中存在的每个(记录ID)的最大值或最大值(版本号),包括选择的行数据。

我的查询返回的数据如下,但返回所有记录ID和版本,我需要它仅返回最大版本号值和所有行数据:

SELECT DISTINCT
    MAX(a.VERSION_NUM), MAX(a.RECORD_ID), 
    b.PERSON, b.STATUS,  
    CAST(a.SUMMARY_DATA AS NVARCHAR(4000)) 
FROM 
    TABLE1 a, TABLE2 b 
WHERE 
    a.RECORD_ID = b.RECORD_ID 
    AND a.RECORD_ID not NULL 
    AND a.SUMMARY_DATA is not NULL 
GROUP BY 
    a.VERSION_NUM, a.RECORD_ID, b.PERSON, b.STATUS,
    CAST(a.SUMMARY_DATA AS NVARCHAR(4000)) 
ORDER BY 
    MAX(a.VERSION_NUM), MAX(a.RECORD_ID) DESC

此查询返回重复的记录ID及其版本号和行数据:

VersionNum   Record ID           Person    Status    Summary Data
     5       000000000000418     John      Open      "specific Summary data ...
     4       000000000000418     Jane      Closed    "specific Summary data ..." 
     3       000000000000418     Sam       Closed:   "specific Summary data ..."  
     4       000000000000229     Joe       Pending   "specific Summary data ..." 
     3       000000000000229     Betty     Closed    "specific Summary data ..."
     2       000000000000229     David     Closed    "specific Summary data ..." 
     7       000000000000318     Karen     Closed    "specific Summary data ..."
     6       000000000000318     Sam       Pending   "specific Summary data ..."
     5       000000000000318     Betty     Closed    "specific Summary data ..."
     4       000000000000318     David     Closed    "specific Summary data ..."

相反,我需要此方法仅返回与其相邻(ID)的最大值(版本号值)以及所有选定行数据的其余部分:

VersionNUM   Record ID         Person   Status     Summary Data 
    5        000000000000418   John     Open       "specific Summary data ..." 
    4        000000000000229   Joe      Pending    "specific Summary data ..."
    7        000000000000318   Karen    Closed     "specific Summary data ..." 

任何帮助是极大的赞赏!

我应用并尝试了此操作,但遇到了错误-需要有关正确语法的帮助以返回这些字段

SELECT * 
FROM 
   (SELECT 
        dt.VERSION, dt.Job_Doc_Set_Request_ID, dt.SUBMITTER,st.STATUS, dt.SUMMARY,
        ROW_NUMBER() OVER (PARTITION BY dt.Job_Doc_Set_Request_ID ORDER BY dt.VERSION DESC) rn 
    FROM 
        RICPM_JD_JobDocDetails dt, RICPM_JD_JobDocSet st) q 
WHERE  
    rn = 1 
    AND dt.Job_DOC_Set_Request_ID NOT LIKE '%DELETED'
    AND st.STATUS = 2 
    AND dt.SUMMARY NOT LIKE 'Obsolete%' 
    AND dt.Job_Doc_Set_Request_ID = st.REQUEST_ID 

错误:

java.sql.SQLException:无法绑定多部分标识符“ dt.Job_DOC_Set_Request_ID”。
在net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)的net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)

SELECT  *
FROM    (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY recordId ORDER BY versionNum DESC) rn
        FROM    mytable
        ) q
WHERE   rn = 1

在SQL Server中,可以使用outer apply 我必须猜测一下实际查询是什么,但我认为:

SELECT b.*, a.*
FROM TABLE2 b OUTER APPLY
     (SELECT TOP 1 a.*
      FROM TABLE1 a 
      WHERE a.RECORD_ID = b.RECORD_ID AND
            a.RECORD_ID not NULL AND
            a.SUMMARY_DATA is not NULL 
      ORDER BY a.version_num desc
     ) a;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM