首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算等于或等于某一时差的记录?

如何计算等于或等于某一时差的记录?
EN

Stack Overflow用户
提问于 2012-12-08 22:45:54
回答 1查看 86关注 0票数 2

假设我有一个名为“志愿人员”的mysql表,它显示了已经注册工作的特定时间轮班的人:

代码语言:javascript
复制
Volunteers 
==============
**UserId** int   
**StartTime** datetime    
**EndTime** datetime

假设这个表包含以下记录:

代码语言:javascript
复制
(1, '2012-01-01 00:00:00', '2012-01-01 01:00:00')
(2, '2012-01-01 00:00:00', '2012-01-01 00:30:00')
(3, '2012-01-01 00:30:00', '2012-01-01 01:00:00')
(4, '2012-01-01 00:00:00', '2012-01-01 00:15:00')
(5, '2011-12-31 23:00:00', '2012-01-01 02:00:00')
(6, '2012-01-01 00:00:00', '2012-01-01 00:00:30')
(7, '2012-01-01 00:00:00', '2012-01-01 00:40:00') 
(8, '2012-01-01 00:20:00', '2012-01-01 01:00:00')

我想计数从这个表中的所有记录,在这个表中,用户已在00:00:00到01:00:00注册工作,但也包括在此计数中可以聚合到所需时差的时间间隔。

例如,使用上面的示例,理想的sql查询将返回4

解释:

用户1已注册完成整个所需的轮班,因此这将使计数增加1。

用户2和3已经注册了工作时隙,这些时隙聚集到了所需的时差,因此这会使计数增加1。

用户4的时间差不能与其他用户的时间差聚合以覆盖所需的时间差,因此这不会增加计数。

用户5涵盖了整个所需的时差,因此这会使计数增加1。

用户6有一个时差,可以与用户8的时差聚合,以覆盖所需的时间偏移,因此这将增加1的计数。

用户7具有可以与用户8的时差聚合以覆盖所需时差的时差,但如果用户8已经与用户6聚合以产生所需的时差,则不应将其包括在计数中。因此,这不会添加到计数中。

因此,计数等于4。

你会怎么做呢?这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-09 03:35:04

我认为您的问题不太适合用SQL完全解决。这是我解决它的方法。

选择与您感兴趣的班次重叠的所有志愿者。

然后,在应用程序层(php/.NET/perl/任何其他)中应用此算法:

  1. 对这些间隔进行排序,并将它们划分为子间隔,以便它们都是不相交的或相等的。
  2. 计算每种类型的相等子间隔的数目。
  3. 这个计数的最低限度是你的答案。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13782711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档