[英]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.