SQL自我加入日期

时间:2018-08-16 14:08:08

标签: sql date join self

我试图在一张桌子上进行自相交并且有点卡住,我已经阅读了很多有关分组的信息,但是似乎找不到实际的例子来帮助我产生良好的输出。

我的源表是这样的...

enter image description here

我想从那里实现这一目标...

enter image description here

任何帮助将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:1)

由于“订单”列是连续的,每个EmplID都没有空格,因此应该使用自左联接。

SELECT
e1.EmplID,
e1."Date",
e2."Date" AS "Next Date"
FROM EmployeeDates AS e1
LEFT JOIN EmployeeDates AS e2 ON (e2.EmplID = e1.EmplID AND e2."Order" = e1."Order" + 1)
ORDER BY e1.EmplID, e1."Order"

如果您的数据库支持窗口功能LEAD,那么您就可以不使用自联接。甚至没有“订单”列。

SELECT
EmplID,
"Date",
LEAD("Date") OVER (PARTITION BY EmplID ORDER BY "Date") AS "Next Date"
FROM EmployeeDates 
ORDER BY EmplID, "Date"

好吧,至少如果“日期”列是DATE类型而不是某些字符串类型,例如CHAR,VARCHAR,TEXT。由于字母排序不会返回与“订单”列相同的订单。