当前位置: 首页 > 面试题库 >

查找一天中花费的时间以及需要休息的时间

颜经艺
2023-03-14
问题内容

我处在某种情况下,我需要找出在办公室进行一些内部申请所花费的总时间。

我有这样的示例数据:

Id  EmployeeId  ScanDateTime    Status
 7  87008   2018-08-02 16:03:00.227 1
 8  87008   2018-08-02 16:06:17.277 2
 9  87008   2018-08-02 16:10:37.107 3
 10 87008   2018-08-02 16:20:17.277 2
 11 87008   2018-08-02 16:30:37.107 3
12  87008   2018-08-02 20:06:00.000 4

这里的状态有不同的含义:

1开始2暂停3恢复4结束

表示员工在状态为1时在ScanDateTime开始工作。他们可以休息一下(状态2),然后返回并继续他们的工作(状态3),状态为4表示他们正在结束工作。注意:工作时间可能会有多个休息时间。

预期产量:

EmployeeId  StartTime                 EndTime                  BreakInMins 
87008       2018-08-02 16:03:00.227   2018-08-02 20:06:00.000   14

我试图按照一些示例来计算预期的结果集,但无济于事。

在类似的示例可用的地方,我找不到任何这样的示例。

任何帮助,将不胜感激。


问题答案:

请尝试这个。处理多个休息/员工和个案,当休息仍在进行中或会话未完成时

select
     [EmployeeId]   =   [s].[EmployeeId]
    ,[StartTime]    =   [s].[ScanDateTime]
    ,[EndTime]      =   [et].[ScanDateTime]
    ,[BreakInMins]  =   [b].[BreakInMins]
from
    [Scans] as  [s] --  here is your table
outer apply
    (      
        select top 1 [ScanDateTime], [Id] from [Scans] where [Id] > [s].[Id] and [EmployeeId] = [s].[EmployeeId] and [Status] = 4 order by [ScanDateTime] asc
    )       as  [et]
outer apply
    (
        select
              [BreakInMins] = sum(isnull([r].[mins], datediff(mi, [sp].[ScanDateTime], getdate())))
        from
            [Scans] as [sp]
        outer apply
            (
                select top 1 [mins] = datediff(mi, [sp].[ScanDateTime], [ScanDateTime]) from [Scans] where [Id] > [sp].[Id] and [EmployeeId] = [sp].[EmployeeId] and [Status] IN (3, 4) order by [ScanDateTime] asc
            ) as [r]
        where
                [sp].[id] > [s].[id] and [sp].[id] < isnull([et].[id], [id] + 1)
            and [sp].[EmployeeId] = [s].[EmployeeId]
            and [sp].[Status] = 2

    )       as  [b]    
where
        [Status] = 1;

这是易于测试的脚本:脚本



 类似资料:
  • 问题内容: 我有一个mongodb,其结构如下: 我需要找到用户在任何特定位置所花费的总时间。我已阅读多个博客,但尚未找到任何具体答案。我有以下几点: 问题答案: 您可以 从字段中找到,然后使用 来获取总数 您可以将其进一步划分以获取天,小时,分钟或秒 对于mongodb 4.0 及更高版本

  • 问题内容: SQL: 用户索引: 个人资料索引 解释 : 上面的查询大约需要0.1221 我怎样才能使其运行更快? 问题答案: 我删除了此查询,因此搜索完成后不会显示总结果数。 似乎是临时解决方案,甚至是永久解决方案。

  • 问题内容: 我有一个时间戳记,我想知道是否有办法在PST中将其舍入到一天的开始。例如,ts:对应于,但是我想将其舍入为一个映射到的时间戳。我读了time.Time文档,但没有找到解决方法。 问题答案: 执行此操作的简单方法是使用上一个创建新内容,并且仅分配年份的月份和日期。看起来像这样; 这是一个表演例子;https://play.golang.org/p/jnFuZxruKm

  • 问题内容: 我有一张桌子来存储事件(目前大约有5M,但还会有更多)。每个事件都有我要对此查询关注的两个属性- (纬度和经度对)和。 我的目标是 :对于给定的位置范围(SW / NE纬度/经度对,因此有4个浮点数)将返回落入这些范围之内的前100个事件。 我目前正在使用以下查询: 现在暂时搁置此查询无法处理的日期线回绕问题。 对于较小的位置范围,此方法效果很好,但是每当我尝试使用较大的位置范围时,时

  • 我在学习java stream api时在代码中发现了这个问题。 这是我的代码 我在sts和inteliJ IDE上试用了这段代码,结果都是一样的。并行比顺序需要更长的时间。我的JDK有问题吗?请建议。

  • 这里有三个子流,其中一个子流是HTTP出站调用。我希望HTTP调用应该尝试获得响应,直到提到的时间。如果超时,那么主流应该中断,并以Json格式显示错误消息作为输出。 下面是代码-