Нужно рассчитать по округленному времени или дате в sql server - PullRequest
6 голосов
/ 04 января 2012

У меня есть 2 столбца данных в Ms Sql 2008

столбец uniqueidentifier в качестве идентификатора и столбец даты и времени с несколькими результатами, как показано ниже.

2011-11-06 18:02:18.030
2011-11-06 18:02:18.373
2011-11-06 18:02:57.560
2011-11-06 18:02:58.593
2011-11-06 18:03:01.717
2011-11-06 18:03:02.373
2011-11-06 18:03:03.407

Помимо сложности столбца идентификатора,Меня интересует только группировка базирующихся на интервалах ом интервалов по

minutes(1,5,10,15,30)
hours (1,2)
days(1,5,10)
months(1,2)

. Результаты должны быть получены или иным образом, чтобы получить только 1 уникальный за интервал. Как следует

2011-11-06 18:02:00 (1 Minute)
2011-11-06 18:03:00 (1 Minute)
2011-11-06 18:04:00 (1 Minute)
2011-11-06 18:05:00 (1 Minute)
2011-11-06 18:06:00 (1 Minute)

Или в день

2011-11-06 00:00:00 (1 Day)
2011-11-07 00:00:00 (1 Day)
2011-11-08 00:00:00 (1 Day)
2011-11-09 00:00:00 (1 Day)
2011-11-10 00:00:00 (1 Day)

и т. Д.

Любые конструктивные предложения приветствуются.

Ответы [ 2 ]

26 голосов
/ 04 января 2012

Вы можете использовать ту же технику для округления до любого интервала дат.Это зависит от целочисленного деления

SELECT
    DATEADD(minute, DATEDIFF(minute, 0, foo), 0),              -- whole minute
    DATEADD(minute, DATEDIFF(minute, 0, foo) / 5 * 5, 0),      -- 5 minute
    DATEADD(minute, DATEDIFF(minute, 0, foo) / 10 * 10, 0),    -- 10 minute
    DATEADD(minute, DATEDIFF(minute, 0, foo) / 15 * 15, 0),    -- 15 minute
    DATEADD(minute, DATEDIFF(minute, 0, foo) / 30 * 30, 0),    -- 30 minute

    DATEADD(hour, DATEDIFF(hour, 0, foo), 0),                  -- whole hour
    DATEADD(hour, DATEDIFF(hour, 0, foo) / 2 * 2, 0),          -- 2 hour

    DATEADD(day, DATEDIFF(day, 0, foo), 0),                    -- whole day
    DATEADD(day, DATEDIFF(day, 0, foo) / 5 * 5, 0),            -- 5 day
    DATEADD(day, DATEDIFF(day, 0, foo) / 10 * 10, 0),          -- 10 day

    DATEADD(month, DATEDIFF(month, 0, foo), 0),                -- whole month
    DATEADD(month, DATEDIFF(month, 0, foo) / 2 * 2, 0)         -- 2 month
FROM
    @dates;
1 голос
/ 04 января 2012

Предполагается, что ваш столбец DateTime с именем mydatetime

За минуты

если только этаж

SELECT DISTINCT DATEADD(MINUTE, DATEPART(minute, mydatetime), DATEADD(HOUR, DATEPART(HOUR, mydatetime), CONVERT(varchar, mydatetime, 112)))
from YourTable

если КРУГЛЫЙ , то это намного проще

select DISTINCT CAST(mydatetime as smalldatetime)
from YourTable

Для часов точно так же

для дней

select DISTINCT CAST(CONVERT(varchar, mydatetime, 112) as date)
from YourTable

Для месяцев

select DISTINCT DATEADD(DAY, 1-DAY(mydatetime), CONVERT(varchar, mydatetime, 112))
from YourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...