我试图在一张桌子上进行自相交并且有点卡住,我已经阅读了很多有关分组的信息,但是似乎找不到实际的例子来帮助我产生良好的输出。
我的源表是这样的...
我想从那里实现这一目标...
任何帮助将不胜感激。 谢谢
答案 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。由于字母排序不会返回与“订单”列相同的订单。