首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按n分钟或小时分组

按n分钟或小时分组
EN

Stack Overflow用户
提问于 2011-06-14 22:08:43
回答 2查看 999关注 0票数 1

我需要按用户定义的时间段查询表和分组记录,该时间段可以是分钟或小时的任意整数。我们要做的一个假设是,任何选定的时间段都是从12:00AM开始的(如果这有任何意义的话)。换句话说,如果用户选择将记录分组15分钟,我们将不允许他们说,从12:07开始每15分钟开始分组我们将自动假设/使用12:00AM作为分组的起始点。对于任何其他时间段都是相同的。

我需要为此创建我自己的函数吗?我不太关心性能,因为我将使用其他方法/限制来尝试控制性能问题。

我的表看起来像这样:

代码语言:javascript
复制
timeentry
--entryid         (autonumber)
--begindatetime   (datetime)
--enddatetime     (datetime)

如果我使用一个函数,我认为这无关紧要,但我确实计划将我的分组基于begindatetime并忽略enddatetime。

我正在使用MS Access,但如果可能的话,我希望我的解决方案能与SQL Server和MySQL兼容。然而,我目前的主要关注点只是MS Access。

EN

回答 2

Stack Overflow用户

发布于 2011-06-14 23:56:27

在我看来,Partition()函数在这里可能很有用。

您的代码将根据用户对日期、时间单位和组间隔的选择创建一条SELECT语句(我假设您希望将查询限制为单个日期的BegindateTime值)。

此日期为2011年6月14日,分钟为时间单位,15分钟为间隔。

代码语言:javascript
复制
SELECT
    Partition(elapsed,0,1440,15) AS time_block,
    q.id,
    q.begindatetime
FROM
    [SELECT
        t.id,
        t.begindatetime,
        TimeValue(t.begindatetime) * 1440 AS elapsed
    FROM tblHK1 AS t
    WHERE
        t.begindatetime>=#2011-06-14#
        And t.begindatetime<#2011-06-15#
    ]. AS q
ORDER BY q.begindatetime;

不过,不知道你会不会喜欢这个。以下是一些示例输出:

代码语言:javascript
复制
time_block id begindatetime
  60:  74   1 6/14/2011 1:06:05 AM
 555: 569   3 6/14/2011 9:15:00 AM
1395:1409   4 6/14/2011 11:15:00 PM

time_block列对用户不是很友好。

票数 2
EN

Stack Overflow用户

发布于 2011-06-15 00:14:41

我不太确定你想要什么,但这里有一个想法:

代码语言:javascript
复制
SELECT DateDiff("n",CDate("00:00"),[BeginDateTime])\15 AS No15s, 
       (DateDiff("n",CDate("00:00"),[BeginDateTime])\15)*15 AS NoMins,
       Count(Table1.BeginDateTime) AS [Count]
FROM Table1
GROUP BY DateDiff("n",CDate("00:00"),[BeginDateTime])\15, 
        (DateDiff("n",CDate("00:00"),[BeginDateTime])\15)*15;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6344844

复制
相关文章

相似问题

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