Sql 如何提取表中添加的最新记录?

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

我想提取与最新版本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_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