在查询中获取以下记录

uubf1zoe  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(260)

例如,如果我们有一个名为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语句的前一个结果行中获取值?。但它并没有像我预期的那样起作用。感谢您的帮助。

m0rkklqb

m0rkklqb1#

您可以使用此查询:

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;

输出:

m528fe3b

m528fe3b2#

我将使用带有聚合的子查询:

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() 功能。

相关问题