Sql 如何提取表中添加的最新记录?
我想提取与最新版本ID关联的记录。 文件提取版本表如下所示:Sql 如何提取表中添加的最新记录?,sql,sql-server,tsql,date,greatest-n-per-group,Sql,Sql Server,Tsql,Date,Greatest N Per Group,我想提取与最新版本ID关联的记录。 文件提取版本表如下所示: VERSION_ID VERSION_TAG RELEASE_DATE 1 1.0.0 2019-10-15 11:49:02.283 2 2.0.0 2019-10-15 13:54:32.940 VERSION_ID FILE COLUMN_HEADER 1 SCHOOLS LOCAL_SCHOO
VERSION_ID VERSION_TAG RELEASE_DATE
1 1.0.0 2019-10-15 11:49:02.283
2 2.0.0 2019-10-15 13:54:32.940
VERSION_ID FILE COLUMN_HEADER
1 SCHOOLS LOCAL_SCHOOL_KEY
1 SCHOOLS SCHOOL_YEAR
1 SCHOOLS DISTRICT_CODE
2 STUDENT SCHOOL_YEAR
2 SCHOOLS SCHOOL_MONTH
2 SCHOOLS CITY_CODE
文件提取版本规格表如下所示:
VERSION_ID VERSION_TAG RELEASE_DATE
1 1.0.0 2019-10-15 11:49:02.283
2 2.0.0 2019-10-15 13:54:32.940
VERSION_ID FILE COLUMN_HEADER
1 SCHOOLS LOCAL_SCHOOL_KEY
1 SCHOOLS SCHOOL_YEAR
1 SCHOOLS DISTRICT_CODE
2 STUDENT SCHOOL_YEAR
2 SCHOOLS SCHOOL_MONTH
2 SCHOOLS CITY_CODE
我想编写一个查询,以提取具有最新版本\u ID的记录(最新版本可以按添加记录的最新日期分隔)
以下是我尝试过的,但它给出了一个错误:
当子查询未引入EXISTS时,只能在选择列表中指定一个表达式
请建议正确的查询执行此操作:
SELECT [FILE], COLUMN_HEADER
FROM FILE_EXTRACT_VERSION_SPECS
WHERE [VERSION_ID] = (SELECT B.[FILE], B.COLUMN_HEADER, A.RELEASE_DATE
FROM FILE_EXTRACT_VERSION_SPECS B
LEFT JOIN FILE_EXTRACT_VERSION A ON A.version_id = B.version_id
GROUP BY [A].[RELEASE_DATE], B.[FILE], B.COLUMN_HEADER
HAVING A.RELEASE_DATE = MAX(A.RELEASE_DATE));
您可以使用子查询选择最新的
版本id
,并使用结果筛选原始表:
select vs.*
from file_extract_version_specs vs
where version_id = (
select top 1 version_id from file_extract_version order by release_date desc
)
您可以使用子查询选择最新的
版本id
,并使用结果筛选原始表:
select vs.*
from file_extract_version_specs vs
where version_id = (
select top 1 version_id from file_extract_version order by release_date desc
)
您也可以通过这样的连接来完成
select vs.*
from file_extract_version_specs vs
join (
select top 1 version_id
from file_extract_version
order by release_date desc
) as tv on vs.version_id = tv.version_id
您也可以通过这样的连接来完成
select vs.*
from file_extract_version_specs vs
join (
select top 1 version_id
from file_extract_version
order by release_date desc
) as tv on vs.version_id = tv.version_id
我将使用OLAP功能来实现这一点:
SELECT fevs.*
FROM FILE_EXTRACT_VERSION_SPECS fevs
INNER JOIN (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY VERSION_ID ORDER BY RELEASE_DATE DESC) AS rn
FROM FILE_EXTRACT_VERSION
) AS fev
ON fevs.VERSION_ID = fev.VERSION_ID
AND FILE_EXTRACT_VERSION.rn = 1
我将使用OLAP功能来实现这一点:
SELECT fevs.*
FROM FILE_EXTRACT_VERSION_SPECS fevs
INNER JOIN (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY VERSION_ID ORDER BY RELEASE_DATE DESC) AS rn
FROM FILE_EXTRACT_VERSION
) AS fev
ON fevs.VERSION_ID = fev.VERSION_ID
AND FILE_EXTRACT_VERSION.rn = 1