在SQL中跳过特定时间的行

在SQL中跳过特定时间的行,sql,db2,Sql,Db2,我需要帮助。 我有两个timestamp列,所以基本上我想得到max和min值,第三列显示为timedifference。我跳过了凌晨12点的时间,所以使用了下面的语法。如何实现第三列的任何帮助,时差。。它在DB2中 SELECT EMPID,MIN(STARTDATETIME),MAX(ENDDATETIME) FROM TABLE WHERE DATE(STARTDATETIME)= '2012-05-15' AND HOUR(STARTDATETIME)<>0 AND HOUR

我需要帮助。 我有两个timestamp列,所以基本上我想得到max和min值,第三列显示为timedifference。我跳过了凌晨12点的时间,所以使用了下面的语法。如何实现第三列的任何帮助,时差。。它在DB2中

SELECT EMPID,MIN(STARTDATETIME),MAX(ENDDATETIME)
FROM TABLE
WHERE DATE(STARTDATETIME)= '2012-05-15' AND HOUR(STARTDATETIME)<>0 AND HOUR(ENDDATETIME)<>0
GROUP BY EMPID

您可以使用内部选择中的结果,并使用这些值定义时间差列。我对DB2的了解非常有限,所以我做了一些假设,但这应该给您一个想法。如果有严重错误,我会更新答案

Select  EmpId, 
        MinStartDate, 
        MaxEndDate, 
        MaxEndDate - MinStartDate As TimeDifference
From
(
    Select  EMPID,
            MIN(STARTDATETIME)  As MinStartDate,
            MAX(ENDDATETIME)    As MaxEndDate
    From    Table
    Where   DATE(STARTDATETIME) = '2012-05-15' 
        And     HOUR(STARTDATETIME) <> 0 
        And     HOUR(ENDDATETIME) <> 0
    Group By EMPID
) A

求两个数(包括时间值)之差的最简单方法是从另一个数中减去一个数。你希望时间差是多少?获得现有答案中的相对值是相当简单的,但如果您要寻找某种精确的持续时间(如毫秒),则不需要。并非所有DB2版本都支持timestackDiff函数,而且当它们支持时,调用与您所显示的不同。@mustaccio啊,这正是我所担心的。是否可以像在对OP的评论中那样直接减去它们?是的,只需减去两个时间戳值,就会得到格式为YYYYMMDDHHMMSS.ffEndDateTime的时间差作为十进制数。ENDDATETIME的条件很难完全满足您需要一个日历表和一些小时,但是STARTDATETIME可以很容易地更改。实际上,查询不会对这些列使用索引。