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

按小时划分时间间隔

华振
2023-03-14
问题内容

我有一个数据集:

  tbldataid          TS                     EndTS
> HX32.3401 10/2/2017 11:49:34 PM   10/3/2017 12:01:57 AM
> HX32.3403 10/3/2017 12:02:48 AM   10/3/2017 12:08:34 AM
> HX32.3425 10/3/2017 2:50:57 AM    10/3/2017 2:50:58 AM
> HX32.3428 10/3/2017 4:06:15 AM    10/3/2017 6:09:19 AM

我想基本上在一个小时内“拆分”这些时间间隔,例如:

tbldataid               TS                EndTS
HX32.3401   10/2/2017 11:49:34 PM   10/2/2017 11:59:99 PM
HX32.3401   10/2/2017 12:00:00 PM   10/3/2017 12:01:57 AM
HX32.3403   10/3/2017 12:02:48 AM   10/3/2017 12:08:34 AM
HX32.3425   10/3/2017 2:50:57 AM    10/3/2017 2:50:58 AM
HX32.3428   10/3/2017 4:06:15 AM    10/3/2017 4:59:99 AM
HX32.3428   10/3/2017 5:00:00 AM    10/3/2017 5:59:99 AM
HX32.3428   10/3/2017 6:00:00 AM    10/3/2017 6:09:19 AM

到目前为止,这是我的代码(该想法的积分发给@DumitrescuBogdan,将通话数据分为15分钟间隔):

SELECT [tbldataid],[TS],
   IIF([EndTS]<=dateadd("n",60*((datediff("n",0,[TS]/60))+.99),0), 
        [EndTS], 
        dateadd("n", 60*(datediff("n",0,[TS]/60)+.99),0)) 
        as [End] 
FROM tbldata


UNION ALL

SELECT t2.[tbldataid], t2.[TS],
   IIF(t1.[EndTS]<=dateadd("n",60*((datediff("n",0, t2.[EndTS])/60)+1),0), 
         t1.[EndTS], 
         dateadd("n",60*((datediff("n",0,t2.[EndTS])/60)+1),0)) 
         as [End] 
FROM 
   tbldata t1 
   LEFT JOIN tbldata t2
   ON t1.[tbldataid]=t2.[tbldataid]
Where t2.[EndTS]<IIF(t1.[EndTS]<=dateadd("n",60*((datediff("n",0,t2.[EndTS])/60)+1),0),
                                   t1.[EndTS],
                                   dateadd("n",60*((datediff("n",0,t2.[EndTS])/60)+1),0));

后半部分(在“全部合并”之后)不产生任何结果,前半部分产生以下结果:

tbldataid             TS                     End
HX32.3401   10/2/2017 11:49:34 PM   10/2/2017 11:59:00 PM
HX32.3403   10/3/2017 12:02:48 AM   10/3/2017 12:08:34 AM
HX32.3425   10/3/2017 2:50:57 AM    10/3/2017 2:50:58 AM
HX32.3428   10/3/2017 4:06:15 AM    10/3/2017 4:59:00 AM

谢谢,我是初学者。我了解第一部分;坦白地说,我不明白下半场

我愿意接受其他解决方案。

我正在使用MS-Access 2010


问题答案:

这可以通过 笛卡尔 查询来完成:

SELECT DISTINCT 
    tblData.tblDataId, 
    IIf([TimeStart] > DateAdd("h",[Factor],CDate(Fix([Timestart]*24)/24)),
        [TimeStart],
        DateAdd("h",[Factor],CDate(Fix([Timestart]*24)/24))) AS TSStart, 
    IIf([TimeEnd] < DateAdd("s",3599,DateAdd("h",[Factor],CDate(Fix([Timestart]*24)/24))),
        [TimeEnd],
        DateAdd("s",3599,DateAdd("h",[Factor],CDate(Fix([Timestart]*24)/24)))) AS TSEnd
FROM 
    qdxFactor, 
    tblData
WHERE
    qdxFactor.Factor Between 0 And DateDiff("h",[TimeStart],[TimeEnd]);

使用其他已保存的笛卡尔查询( qdxFactor ):

SELECT DISTINCT 
    [Tens]+[Ones] AS Factor, 
    10*Abs([Deca].[id] Mod 10) AS Tens, 
    Abs([Uno].[id] Mod 10) AS Ones
FROM 
    MSysObjects AS Uno, 
    MSysObjects AS Deca;

结果:

tblDataId   TSStart             TSEnd
    3401    2017-10-02 23:49:34 2017-10-02 23:59:59
    3401    2017-10-03 00:00:00 2017-10-03 00:01:57
    3403    2017-10-03 00:02:48 2017-10-03 00:08:34
    3425    2017-10-03 02:50:57 2017-10-03 02:50:58
    3428    2017-10-03 04:06:15 2017-10-03 04:59:59
    3428    2017-10-03 05:00:00 2017-10-03 05:59:59
    3428    2017-10-03 06:00:00 2017-10-03 06:09:19

第二个示例:

tblDataId   TimeStart           TimeEnd
    3430    2017-10-07 02:08:24 2017-10-07 14:09:30

结果:

tblDataId   TSStart             TSEnd
    3430    2017-10-07 02:08:24 2017-10-07 02:59:59
    3430    2017-10-07 03:00:00 2017-10-07 03:59:59
    3430    2017-10-07 04:00:00 2017-10-07 04:59:59
    3430    2017-10-07 05:00:00 2017-10-07 05:59:59
    3430    2017-10-07 06:00:00 2017-10-07 06:59:59
    3430    2017-10-07 07:00:00 2017-10-07 07:59:59
    3430    2017-10-07 08:00:00 2017-10-07 08:59:59
    3430    2017-10-07 09:00:00 2017-10-07 09:59:59
    3430    2017-10-07 10:00:00 2017-10-07 10:59:59
    3430    2017-10-07 11:00:00 2017-10-07 11:59:59
    3430    2017-10-07 12:00:00 2017-10-07 12:59:59
    3430    2017-10-07 13:00:00 2017-10-07 13:59:59
    3430    2017-10-07 14:00:00 2017-10-07 14:09:30


 类似资料:
  • 问题内容: 我需要将表分组为15分钟间隔。我可以这样做: 但是要在图表中显示返回的数据,我还需要插入没有任何数据且当前未出现在我的select语句中的间隔。我该如何插入这些? 问题答案: 用15分钟的增量创建一个带有所有可能时间戳的表,然后从该表向上面的查询进行LEFT JOIN。 如果您知道图表始终涵盖24小时,则只需创建一个数字为0-95的表格,然后为每个条目将其添加到图表的开始时间。

  • 我有一个“周期”(P)的时间,由开始时间(S)和结束时间(E)表示。我想把P分成大小为D的C块。也就是说, P=C*dr,其中R是余数或剩余时间。 eg. 我想存储和显示所有的块C及其开始时间、结束时间和大小。最后,我想存储并显示剩余的内容。我如何利用乔达的时间做到这一点? API是否提供了简单的方法和类来实现这一点,或者我将不得不想出一条出路? 这个问题是我在这里发布的另一个问题的一小部分

  • 问题内容: 我正在从大量客户端应用程序接收请求/事件。我想使用elasticsearch找出我的最高流量点。 我尝试过的一件事是使用嵌套的直方图进行过滤器聚合,然后使用嵌套的“术语”聚合通过脚本字段获取一天中不同的时间。以下是我的尝试,它的执行效果非常好(正如我期望的那样,因为我正在为每个文档执行脚本)。 我还考虑过将要查询的日期元素存储为文档的不同部分,例如: 这也闻起来像是对我的错误答案。 经

  • 问题内容: 我有一个包含datetime列和一些其他列的表。datetime列表示发生的事件。它可以包含一个时间(事件在那个时间发生)或NULL(事件没有发生) 我现在想计算在特定时间间隔(15分钟)内发生的记录数,但是不知道该怎么做。 例子: 现在,我想创建一个查询,该查询将创建类似于以下内容的结果集: 这在SQL中可能吗,或者有人可以建议我可以使用哪些其他工具?(例如,将数据导出到电子表格程序

  • 然后返回给我以下文档: 如何使用GroupOperation在spring-data-mongo中指定form这个聚合?

  • 问题内容: 我有一个用例,其中: 数据的格式为:Col1,Col2,Col3和时间戳。 现在,我只想获取行数与时间戳箱的数量。 也就是说,对于每半小时的存储桶(甚至没有对应行的存储桶),我需要计算有多少行。 时间戳记分布在一年内,因此我无法将其划分为24个存储桶。 我必须每隔30分钟将它们装箱。 问题答案: 通过