Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >合并开始时间和结束时间之间没有间隙的时间表行

合并开始时间和结束时间之间没有间隙的时间表行
EN

Stack Overflow用户
提问于 2020-09-03 05:51:34
回答 1查看 37关注 0票数 1

我正在开发一个时间表系统,员工可以全天从事不同的工作。我需要执行某种类型的查询,以返回时间的合并版本,以便如果一名员工工作了一整天,在不同的工作之间没有任何休息,那么我只会得到该天的一行。但是,如果一行的结束时间与下一行的开始时间之间存在差距,则应将其作为单独的行返回。我还需要休息时间和总时间的总和。

我希望这是有意义的?我也许可以用光标或其他什么东西来做,但那不是最优雅的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DECLARE @Times TABLE (StartTime DATETIME, EndTime DATETIME, BreakHours DECIMAL(8,2), TotalHours DECIMAL(8,2))
INSERT INTO @Times (StartTime, EndTime, BreakHours, TotalHours)
VALUES ('2020-08-24 07:00','2020-08-24 08:30',0.00,1.50)
,('2020-08-24 08:30','2020-08-24 12:00',0.50,3.00)
,('2020-08-24 12:00','2020-08-24 16:00',0.00,4.00)
,('2020-08-24 16:00','2020-08-24 17:30',0.00,1.50)
,('2020-08-25 07:00','2020-08-25 08:30',0.00,1.50)
,('2020-08-25 08:30','2020-08-25 11:45',0.50,2.75)
,('2020-08-25 12:00','2020-08-25 16:00',0.00,4.00)
,('2020-08-25 16:00','2020-08-25 17:45',0.00,1.75)
,('2020-08-25 23:00','2020-08-26 05:00',0.50,5.50)

这就是我希望看到的结果集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
StartTime           EndTime             BreakHours  TotalHours
2020-08-24 07:00    2020-08-24 17:30    0.50        10.00
2020-08-25 07:00    2020-08-25 11:45    0.50        4.25
2020-08-25 12:00    2020-08-25 17:45    0.00        5.75
2020-08-25 23:00    2020-08-26 05:00    0.50        5.50
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-03 07:32:52

这是一个差距和岛屿问题。一种方法是使用lag()来检索“之前”的结束日期和一个窗口sum(),该窗口在每次遇到差距时都会递增。这定义了相邻行的组,然后您可以聚合这些行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 
    min(starttime) starttime,
    max(endtime) endtime,
    sum(breakhours) breakhours,
    sum(totalhours) totalhours
from (
    select t.*, sum(case when starttime = lag_endtime then 0 else 1 end) over(order by starttime) grp
    from (
        select t.*, lag(endtime) over(order by starttime) lag_endtime
        from mytable t
    ) t
) t
group by grp

您的数据似乎缺少标识员工的列。如果有,通常会将其作为partition添加到窗口函数的over()子句和外部查询的group by子句中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63717619

复制
相关文章
php获取当天的开始时间和结束时间
//当天开始时间 $start_time=strtotime(date("Y-m-d",time())); //当天结束之间 $end_time=$start_time+60*60*24; echo $start_time; 1541001600 echo $end_time; 1541088000 $start_time=date("Y-m-d H:i:s",$start_time); $end_time=date("Y-m-d H:i:s",$end
超级小可爱
2023/02/20
2K0
java根据开始时间和结束时间,计算出时间工作日天数(包含开始和结束时间)
public int weekDay(String strStartDate, String strEndDate) { //strStartDate:"2019-10-25",strEndDate:"2019-12-10" SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar clOne = Calendar.getInstance(); Calendar clTwo = Calendar.getInstance(); try { clOne.setTime(df.parse(strStartDate)); clTwo.setTime(df.parse(strEndDate)); } catch (ParseException e) { System.out.println("日期格式非法"); e.printStackTrace(); } int days = 0; while (clOne.compareTo(clTwo) <= 0) { if (clOne.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && clOne.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) days++; clOne.add(Calendar.DAY_OF_MONTH, 1); } return days; }
botkenni
2019/11/10
2.6K0
golang时间和mysql时间表示
墙上时钟:也称为墙上时间。大多是1970年1月1日(UTC)以来的秒数和毫秒数。墙上时间可以和NTP(Network Time Protocal,网络时间协议)同步,但是如果本地时钟远远快于NTP服务器,则强制重置之后会跳到先前某个时间点。
golangLeetcode
2023/03/01
4.5K0
golang时间和mysql时间表示
设置时间laydate 结束时间大于开始时间
其实就是在结束时间框里设置开始时间的最大时间 在开始时间框里设置结束时间的最小时间 具体代码如下 layui.use(['form', 'laydate'], function(){ var form = layui.form; var laydate = layui.laydate; //日期范围 var startDate=laydate.render({ elem: '#start_time',
Erwin
2020/01/08
1.9K0
时间控件设置开始时间不大于结束时间
<div class="form-horizontal fl"> <div class="control-group"> <label class="control-label">生成时间</label> <input type="text" size="12" readonly="readonly" name="beginDate" id="starttime" value="" class="Wdate" onClick="WdatePicker({dateFm
用户1220053
2018/02/09
1K0
Django model 数据约束 结束时间大于开始时间
数据模型: class Task(models.Model): taskStartTime = models.DateTimeField(verbose_name='开始时间') taskEndTime = models.DateTimeField(verbose_name='结束时间') def __str__(self): return self.taskName 添加约束: class Task(models.Model): taskStart
SingYi
2022/07/13
5530
Django model 数据约束 结束时间大于开始时间
搜索框和数据库均有开始时间和结束时间的sql
活动表中有两个字段:startDate、endDate,分别代表开始时间、结束时间。现在需要查询某一时间段内正在进行的活动,实际只要满足活动的时间段和查询条件的时间段有交集即可,包含以下图片中的四种情况。使用表达式startDatePara <= endDate && endDatePara >= startDate可以确定
似水的流年
2019/12/05
1.2K0
时间表达式
“*”:字符代表所有可能的值 因此,“”在子表达式(月)里表示每个月的含义,“”在子表达式(天(星期))表示星期的每一天
Java架构师必看
2021/07/23
5530
Moment函数上周/上月等时间开始和结束数组
屏幕快照 2018-10-29 下午6.03.21.png 本周 export function getThisWeekDate(date) { // 获取到本周的周一 const startDate = Moment() .startOf("week") .format("YYYY-MM-DD"); //.valueOf()获取到的是Long,不然就是一个Moment对象 const endDate = Moment() .endOf("week") .form
程序员不务正业
2018/12/04
1.6K0
Moment函数上周/上月等时间开始和结束数组
iOS 时间和时间戳之间转化
以毫秒为整数值的时间戳转换 时间戳转化为时间NSDate - (NSString *)timeWithTimeIntervalString:(NSString *)timeString { // 格式化时间 NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; formatter.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"]; [formatter
用户1941540
2018/05/11
1.3K0
敏捷规划时间表
本文要点 敏捷规划时间表能够可视化展示项目进度 使用敏捷方法在一个比较高的层次控制项目 敏捷规划时间表可以作为可量化的高层次交付的挽具 它提供了一种工具来协调项目活动 它有助于强化有效沟通 与自己定制开发相比,你可能会选择购买一款适合你的业务的软件。这似乎是一种更好的方案,因为它不仅满足了你的业务需求,还不需要自己定制代码。简直太完美了。通常,你会根据自己的业务需求,确定一个最佳的软件实施日期。举个例子,如果你是做糖果的,你不会在情人节前或者复活节周末前实施这款软件,(毕竟你需要在重要的业务活动期间保证业务
用户1263954
2018/05/30
1.1K0
任务,微任务,队列和时间表
正确答案:script start,script end,promise1,promise2,setTimeout,但它在浏览器支持方面相当野生那里。
公众号---人生代码
2020/05/26
2.2K0
Golang获取过去或将来某周某月的开始时间戳和结束时间戳
Golang获取过去或将来某周某月的开始时间戳和结束时间戳 开发过程中我们经常需要拿到相对于当前时间过去或将来的某周某月的开始和结束时间戳,下面为大家准备了对应的方法。 1.获取某周的开始和结束时间戳 // 获取某周的开始和结束时间,week为0本周,-1上周,1下周以此类推 func WeekIntervalTime(week int) (startTime, endTime string) { now := time.Now() offset := int(time.Monday - no
用户6786882
2021/11/19
3.3K0
bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示
上次简单介绍了一下:05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器(http://www.cnblogs.com/dunitian/p/5524019.html) 这次深入再介绍一下
逸鹏
2018/04/10
1.4K0
bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示
mysql在开始与结束时间过滤出有效的价格且结束时间可以为空
在商品配置中设置有售卖时间,同一个商品可以设置多组不同的售卖时间,其中开始时间必填,结束时间可以不填,但是同一时刻只会有一个正在生效的时间区间。
翎野君
2023/05/12
5110
PHP 获取指定年月日的开始和结束时间戳 转
以上就是PHP 获取指定年月日的开始和结束时间戳的全文介绍,希望对您学习和使用php有所帮助.
双面人
2019/04/10
2.7K0
Javascript设置广告和时间表和数组的学习
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title></title> 5 </head> 6 <body> 7 <hr>
别先生
2017/12/29
8950
Javascript设置广告和时间表和数组的学习
Java获取当天、当前月、当前年(今年)的开始和结束时间戳
最近在做统计相关的功能的时候涉及到了获取当天的开始和结束的时间戳、当月和当年的开始结束时间戳,特此记录,以作备忘。
翎野君
2023/05/12
3.2K0
Java获取当天、当前月、当前年(今年)的开始和结束时间戳
GlusterFS发布时间表 (Release Schedule)
    Gluster版本发布分为主版本和次要版本。主版本通常包含新功能(除了bug修复),次要版本是为了改善主版本的稳定性,提供bug反馈和修复。
党志强
2020/02/11
1.2K0
点击加载更多

相似问题

高亮显示开始时间和结束时间之间的行

13

将2行合并为1行(开始时间和结束时间)

12

Pandas合并具有相同开始和结束时间的行

327

使用开始时间和结束时间制定给定分钟的时间表

12

在开始和结束时间之间扫描行键

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文