操作方法:如何使用 SQL SELECT JOIN 提取最新记录

Posted

技术标签:

【中文标题】操作方法:如何使用 SQL SELECT JOIN 提取最新记录【英文标题】:How To: How to extract the latest record with a SQL SELECT JOIN 【发布时间】:2020-11-09 13:13:05 【问题描述】:

美好的一天,

我目前在使用 SQL 中的 select 语句时遇到问题。我正在尝试从表中提取数据。 select 语句为同一记录返回多行,因为该记录有不同的个人。但是我确实想查看最新的单个行。

例如结果选项卡:

Row 1: 1 entry1 yes yes yes 20 50 Dawid

Row 2: 2 entry1 yes yes yes 20 50 Jan

Row 3: 3 entry1 yes yes yes 20 50 Charlie

必需的结果选项卡:

Row 3: 3 yes yes yes 20 50 Charlie

不幸的是,我必须使用的唯一参考是主键。

ENT 用于入口表,实例链接到工作流并从实例链接到当前工作流进度。我需要帮助才能仅返回每个条目所有结果中的最新 1 个。这可能吗?

我不能使用 CTE 或任何变量声明,因为我要生成一个不支持它的 SQL 报告。

LEFT JOIN ENT_Instance ENTI ON ENT.entryID = ENTI.entryID
LEFT JOIN VW_Instance WFI ON ENTI.instanceID = WFI.instanceID
LEFT JOIN WF_Progress wfpg ON WFI.instanceID = wfpg.instanceID

我们将不胜感激。

【问题讨论】:

“但是我不想看到最新的单个行”,然后您在所需结果中显示“最后”行。是哪一个,你做还是不做? “我不能使用 CTE 或任何变量声明,因为我将生成一个不支持它的 SQL 报告。”应用程序,您也应该标记该应用程序。 我对我的错字表示歉意 Larnu - 我只想看到最新的个人。我还提出了我对应用程序的 SQL 包支持的担忧。这是一项正在进行的工作。 这能回答你的问题吗? Retrieving last record in each group from database - SQL Server 2005/2008 这能回答你的问题吗? How to select the last record of a table in SQL? 【参考方案1】:

你可以尝试这样做:

SELECT a.*, p1.*
FROM ENT_Instance a
JOIN VW_Instance p1 ON (a.id = p1.ENTI)
LEFT OUTER JOIN ENT_Instance p2 ON (a.id = p2.ENTI AND 
    (p1.date < p2.date OR (p1.date = p2.date AND p1.id < p2.id)))
WHERE condition;

【讨论】:

以上是关于操作方法:如何使用 SQL SELECT JOIN 提取最新记录的主要内容,如果未能解决你的问题,请参考以下文章

如何修改此工作 SQL SELECT/JOIN 查询以删除重复项?

优化 Sql Query 去掉 SELECT 子句并使用 JOIN

SQL sum()后许多字段要group by不使用group by, 改用left join select 需要的字段。哪个方法好?速度快?

关于SQL中Union和Join的用法

MYSQL06_sql99的7种JOIN操作union all

第四篇:记录相关操作 SQL逻辑查询语句执行顺序