[英]Get the following record in query
例如,如果我们有一个名为 Activity 的表并且有行 [ActivityCode 和 StartTime]
ActivityCode-----StartTime<BR>
Lunch------------1200<BR>
MathClass--------1300<BR>
EnglishClass-----1500<BR>
EndOfSchool------1700<BR>
现在我想做一个 SQL 查询显示如下:
ActivityCode-----StartTime-----EndTime<BR>
Lunch------------1200----------1300<BR>
MathClass--------1300----------1500<BR>
EnglishClass-----1500----------1700<BR>
EndOfSchool------1700----------1700<BR>
我不知道该怎么做。 我试图按照如何从 SELECT 语句的先前结果行中获取值? . 但它并没有像我预期的那样工作。 任何帮助表示赞赏。
您可以使用此查询:
SELECT
Activity.ActivityCode,
Activity.StartTime,
Nz((Select Top 1 StartTime
From Activity As T
Where T.StartTime > Activity.StartTime
Order By StartTime Asc),
[StartTime]) AS EndTime,
CDate(TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-
TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0)) AS Duration
FROM
Activity;
Output:
我会使用带有聚合的子查询:
select a.*,
(select nz(min(a2.starttime), a.endtime)
from activity as a2
where a2.starttime > a.starttime
) as endtime
from activity as a;
通常在这样的例子中,会有一个额外的列来标识某种“分组”——比如一个人。 如果您有这样的列,您将在子查询中具有相等条件以及时间上的不等式。
此外,几乎在任何其他数据库中都有更好的方法来执行此操作——特别是lead()
function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.