【发布时间】:2013-08-25 18:21:57
【问题描述】:
这是表结构的简化版本。
Employee
(
ID GUID NOT NULL
OldID GUID NULL
Name VARCHAR(50) NOT NULL
CreationDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
)
它包含员工信息以及对员工属性所做的任何更改。这样我们就可以对所做的更改进行完整的审核。当 OldID 为 NULL 时,这基本上意味着最新的数据。这是一个示例,我使用整数值作为标识符以使此示例更易于理解。
ID OldId Name CreationDate
13 NULL John 15-July-2013
12 13 John1 14-July-2013
11 12 John2 13-July-2013
10 11 John3 12-July-2013
121 NULL Smith 15-July-2013
首先,我可以通过
从表中获取唯一员工SELECT ID, Name FROM Employee WHERE OldId IS NULL
我正在寻找最新的 ID,但它的最早名称。所以结果应该是两行
ID Name
13 John3
121 Smith
我不确定如何获得这些结果。任何帮助将不胜感激。
【问题讨论】:
-
好吧,+1 可能是今天第一个在日期/时间列中存储日期/时间值的人。
-
OldID 的示例值看起来像新记录的 ID...
-
如果我在示例中使用了 guid,那么查看链接会有点棘手,这就是为什么我在发布“我使用整数值作为标识符以使该示例更易于理解”中提到它的原因。”
-
看起来你想做一个递归自加入。见这里:stackoverflow.com/questions/1757260/…
-
您能否展示您想要的结果?您想要每个员工的最早和最新姓名吗?在不同的行中,还是在同一行中?单词问题并不好玩(到目前为止,有两个人因此而崩溃并烧毁了答案)。向我们展示预期的输出,这样我们就不必猜测了。
标签: sql-server-2008 tsql