因此,如果我们有一个包含以下内容的表:
app.use(function (err, req, res, next) {
res.status(404).json({message: err.message})
})
我想更新同一个表中的下一个日期值,并将Id INT
EventDate DATETIME
NextDate DATETIME
UserId INT
值设置为与该用户相关的下一个条目的日期。
以下是基本查询,但我不确定如何告诉它从下一个NextDate
EventDate
答案 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
的替代方法更有效。