当前位置: 首页 > 面试题库 >

将表与同一表的先前记录联接

方奕
2023-03-14
问题内容

我有一个带有历史记录的表,该表由主表中的多个触发器发布在该表中。我想在历史记录表上创建一条select语句,在该表中,我的每条记录都由其先前的记录(由相同的LineID和最高的ActionDate标识)进行了联接,因此我可以提取这两者之间的差异。

我尝试了此操作,但是(My)SQL不允许引用JOINED子选择中的第一个“ FROM”表:where子句中的未知列h1.LineID

select 
  h1.*, 
  prev.* 
from history h1
LEFT OUTER JOIN 
  (Select * 
     From history h2 
     where  h1.LineID=h2.LineID and h2.ActionDate < h1.ActionDate 
     order by Actiondate desc limit 1
  ) prev on h1.LineID=prev.LineID

我怎样才能做到这一点?


问题答案:

您可以使用以下命令获取对上一行的引用:

select h.*,
       (select h2.ActionDate
        from history h2
        where h2.LineId = h.LineId and h2.ActionDate < h.ActionDate
        order by h2.ActionDate desc
        limit 1
       ) as prev_ActionDate
from history h;

如果需要完整的行,可以使用join获取数据:

select h.*, hprev.*
from (select h.*,
             (select h2.ActionDate
              from history h2
              where h2.LineId = h.LineId and h2.ActionDate < h.ActionDate
              order by h2.ActionDate desc
              limit 1
             ) as prev_ActionDate
      from history h
     ) h left join
     history hprev
     on hprev.LineId = h.LineId and hprev.ActionDate = h.prev_ActionDate;


 类似资料:
  • 问题内容: 我正在寻找连接2个表并仅显示明细表的最后一条记录的正确SQL代码。 我有一个带有2个表的数据库, 每个交易都有多个评论,但是我想创建一个显示所有交易的视图,并且仅显示每个交易的最后一条评论(由CommentTime确定)字段 问题答案: 编辑:我没有足够接近地阅读初始问题,也没有注意到视图中需要所有DEALS行。以下是我的修改后的答案:

  • 问题内容: 请问您在以下方面的帮助吗? 我正在尝试计算结果中从一条记录到下一条记录的变化。如果我向您显示我当前的查询和结果,可能会有所帮助… 查询给我这些结果… 理想情况下,我想要获得的结果将类似于以下内容… 查看“ 2012年1月1日”的行,由于“笔数”已从以前的526增加到531,因此“ TChange”的值为5。“ FChange”将基于“ Funded”字段。我猜想要知道的是,此示例的上一

  • 问题内容: 我已经读到Joins比子查询更有效,我的查询非常慢,并且使用很多子查询,因此我想改进它,但不知道如何做。 我有以下表格: 查询是: -该查询的目标是为每个房屋(即每个aacode)生成一个文本形式的字符串,以表格等形式描述房屋。因此,三人房屋的输出可能看起来像 我知道我当前的HsHld代码很糟糕,但是包含在下面: 有几项关键的事情需要改变。 目前,我无法从Rel字段连接到Relativ

  • 问题内容: 我在SQL Server输出中有一个查询, 假设我有一个具有某些字段的表(Ex.StudentMaster)-没有唯一约束。对于前 RollNumber和Name该表具有相同的数据。例如: 我只想获得第三条记录。如何识别此唯一记录? 问题答案: 任何一行都是第三行:-) 删除“第三”行:-) 删除最后一行:

  • 问题内容: 我有以下表格- 这是SQLFIDDLE 分类 和 产品展示 我想获取类别列表以及活跃产品的数量。如果某个类别的产品均未激活,则应返回0。 有点像下面的表格- 我想出了以下查询- 仅当 每个类别 中至少有一个产品处于活动状态时, 以上 查询才有效 。如果没有产品面世,它应该返回为 0 我怎样才能解决这个问题 ? 这是SQLFIDDLE 问题答案: 使用代替: 将谓词from 子句移至,这

  • 问题内容: 我有一个表格,其中有一个父/子关系,其中每个孩子的列数据都需要连接到父母中。 这是一些示例数据,该数据已损坏,因此父记录(Id = 96) 为 NULL 。关系是通过字段进行的: 数据应如下所示: 编辑: 后代级别可以是任何深层次,但深子级后代需要更新为主要的父级 。拿下面的最后两个记录( Id = 100 和 Id = 101 )都链接到97。因为 Id = 97 IS NOT NU