我需要按用户定义的时间段查询表和分组记录,该时间段可以是分钟或小时的任意整数。我们要做的一个假设是,任何选定的时间段都是从12:00AM开始的(如果这有任何意义的话)。换句话说,如果用户选择将记录分组15分钟,我们将不允许他们说,从12:07开始每15分钟开始分组我们将自动假设/使用12:00AM作为分组的起始点。对于任何其他时间段都是相同的。
我需要为此创建我自己的函数吗?我不太关心性能,因为我将使用其他方法/限制来尝试控制性能问题。
我的表看起来像这样:
timeentry
--entryid (autonumber)
--begindatetime (datetime)
--enddatetime (datetime)如果我使用一个函数,我认为这无关紧要,但我确实计划将我的分组基于begindatetime并忽略enddatetime。
我正在使用MS Access,但如果可能的话,我希望我的解决方案能与SQL Server和MySQL兼容。然而,我目前的主要关注点只是MS Access。
发布于 2011-06-14 23:56:27
在我看来,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 PMtime_block列对用户不是很友好。
发布于 2011-06-15 00:14:41
我不太确定你想要什么,但这里有一个想法:
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;https://stackoverflow.com/questions/6344844
复制相似问题