Группировка по n минутам или часам - PullRequest
1 голос
/ 14 июня 2011

Мне нужно запросить таблицу и групповые записи по заданному пользователем периоду времени, который может быть любым целым числом минут или часов.Мы предполагаем, что любой выбранный период времени начинается в 12:00 (если это имеет смысл).Другими словами, если пользователь решит сгруппировать записи по 15 минутам, мы не позволим им сказать: начинайте группировку каждые 15 минут, начиная с 12:07.Мы автоматически примем / используем 12:00 в качестве отправной точки для группировки.То же самое для любого другого периода времени.

Нужно ли для этого создавать собственную функцию?Меня не слишком беспокоит производительность, так как я буду использовать другие методы / ограничения, чтобы попытаться избежать проблем с производительностью.

Моя таблица выглядит следующим образом:

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

Если я используюЯ не думаю, что это имеет значение, но я планирую основывать свои группы на времени начала и игнорировать время окончания.

Я использую MS Access, но я бы хотел, чтобы мое решение было совместимо с SQL Server и MySQLесли возможно.Тем не менее, мой основной фокус на данный момент - это MS Access.

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

Мне кажется, здесь может быть полезна функция Partition ().

Ваш код будет создавать оператор SELECT на основе выбора пользователя для даты (я предположил, что вы хотите ограничить запрос значениями начала и времени для одной даты), единицами времени и групповым интервалом.

Это будет 14 июня 2011 г. в качестве даты, минуты в качестве единиц времени и 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 голос
/ 14 июня 2011

Я недавно ответил на аналогичный вопрос, который, похоже, здесь поможет. Вот ответ .

0 голосов
/ 14 июня 2011

Я не совсем уверен, что вы хотите, но вот одна идея:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...