按分钟或小时分组

时间:2011-06-14 14:08:43

标签: sql ms-access

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

我需要为此创建自己的功能吗?我并不过分关注性能,因为我将使用其他方法/限制来试图避免性能问题。

我的表格如下:

timeentry
--entryid         (autonumber)
--begindatetime   (datetime)
--enddatetime     (datetime)

如果我使用某个函数,我认为这不重要,但我的确计划将我的分组基于begindatetime并忽略enddatetime。

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

3 个答案:

答案 0 :(得分:2)

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

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

这个是2011年6月14日作为日期,分钟作为时间单位,15分钟作为间隔。

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;

不知道你有多喜欢这个。这是一些示例输出:

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列不是非常用户友好。

答案 1 :(得分:1)

我刚才回答了类似的问题,这似乎对此有所帮助。 Here's the answer

答案 2 :(得分:0)

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

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;