我有一张包含历史记录的表,在主表中通过几个触发器发布。我想在历史记录表上创建一个select语句,其中每个记录按其先前记录JOINed(由相同的LineID和最高的ActionDate标识),因此我可以提取这两者之间的差异。
我试过这个,但是(我的)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
我该如何做到这一点?
答案 0 :(得分:5)
您可以使用以下方式获取对上一行的引用:
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;
答案 1 :(得分:1)
请使用以下代码
从历史记录中选择*作为内部联接历史记录,如pre.ActionDate&lt; h.ActionDate和prev.LineID = h.LineID
希望它会对你有所帮助。
答案 2 :(得分:0)
使用以下代码自行解决:
select *
from history h1
LEFT OUTER JOIN history h2 on h1.LineID=h2.LineID
and h2.ActionDate = (select max(actiondate)
from history h3
where h3.LineID=h1.LineId and h3.Actiondate < h1.ActionDate
)
order by h1.actiondate desc;