从自身更新表,但只有最高结果

时间:2016-04-11 00:11:41

标签: jquery sql sql-server tsql sql-update

因此,如果我们有一个包含以下内容的表:

app.use(function (err, req, res, next) {
  res.status(404).json({message: err.message})
})

我想更新同一个表中的下一个日期值,并将Id INT EventDate DATETIME NextDate DATETIME UserId INT 值设置为与该用户相关的下一个条目的日期。

以下是基本查询,但我不确定如何告诉它从下一个NextDate

更新它
EventDate

2 个答案:

答案 0 :(得分:3)

您必须将此表连接到自身,有效地表现得像有两个表,或者为子查询中的每个记录选择下一个日期。您的查询可能如下所示:

UPDATE EVENTS
SET e.NextDate = (
  SELECT TOP 1 n.EventDate
  FROM EVENTS AS n
  WHERE e.UserId = n.UserId
  AND n.EventDate > e.EventDate
  ORDER BY n.EventDate ASC)
FROM EVENTS AS e

它可能不是100%正确,因为我有一段时间没有使用Windows SQL服务器。基本思路与将表连接到另一个表相同,只不过将它连接到同一个表。

请参阅此答案以获取更多帮助:https://stackoverflow.com/a/14618713/1160540

答案 1 :(得分:2)

我会使用lead()函数(在SQL Server 2012 +中可用):

with toupdate as (
      select e.*,
             lead(eventdate) over (partition by userid order by eventdate) as next_eventdate
      from e
     )
update toupdate
    set nextdate = next_eventdate;

注意:这应该比使用连接,相关子查询或apply的替代方法更有效。