|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Есть таблица [Дата] (datetime) [Канал] [Данные] Данные добавляются каждую минуту. Надо... По прошествию суток суточные данные перенести в другую (суточную)таблицу той же структуры,но сгруппированые по дате и каналу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 11:51 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Планируешь задачу, которая будет по расписанию 1 раз в сутки выполнять например процедуру, которая и добавит записи из одной табл в друг, ведь время ты знаешь - какой период в смысле. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 12:11 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Это понятно. Но я хотелбы перенести СГУППИРОВАННЫЕ данные (в этом смысл, ведь минутная таблица растет как на дрожжах), но структура то таблиц одинаковая. А период - прошедшие сутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 13:22 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Искренне не понимаю в чем проблемма. Что мешает их СГРУППИРОВАТЬ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 14:27 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Ja tak ponimaju chto pri izpolzovanii prosto ...GROUP BY [Дата], t.k pole soderzhit eshe i minuty, gruppirovka tolko po date ne proishodit Poprobui tak SELECT CAST(YEAR([Дата]) AS char(4)) + '.' + CAST(MONTH([Дата]) AS varchar(2)) + '.' + CAST(DAY([Дата]) AS varchar(2)) AS mydate, COUNT(*) AS cnt (ili SUM()) FROM mytable WHERE [Дата] BETWEEN CONVERT(DATETIME, '2001-01-01 00:00:00',120) AND CONVERT(DATETIME, '2001-01-01 23:59:59', 120) GROUP BY CAST(YEAR([Дата]) AS char(4)) + '.' + CAST(MONTH([Дата]) AS varchar(2)) + '.' + CAST(DAY([Дата]) AS varchar(2)) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 14:59 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Заранее извиняюсь, поскольку мой ответ можно посчитать повтором я бы использовал конструкцию вида: SELECT convert(datetime, floor(convert(float, [Дата]))), [Канал], AVG...SUM...COUNT([Данные]) FROM [Таблица] WHERE floor(convert(float, [Дата])) = floor(convert(float, @current_date)) GROUP BY convert(datetime, floor(convert(float, [Дата]))), [Канал] Дело в том, что при представлении даты в виде float целая часть - это дни а дробная время в переделах суток ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 16:29 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
P.S. поскольку нужны прошедшие сутки вместо WHERE FLOOR(CONVERT(FLOAT, [Дата])) = FLOOR(CONVERT(FLOAT, @current_date)) нужно написать WHERE FLOOR(CONVERT(FLOAT, [Дата])) = FLOOR(CONVERT(FLOAT, GATEDATE()) - 1) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 16:45 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
2Denis > Дело в том, что при представлении даты в виде float целая часть - это дни а дробная время в переделах суток Togda uz srazu CONVERT(INT, [Дата]) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2001, 17:21 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
Если использовать последнии рекомендации, то можно заметить что время до обеда и после обеда сконвертируется в разные числа. declare @d datetime select @d='20000101 08:00' select convert(int,@d) select @d='20000101 18:00' select convert(int,@d) Можно конечно добавлять по пол-дня, но вдруг они в следующих версиях это исправят? Поэтому я бы предложил варианты: 1.сделать некую процедуру которая бы запускалась в определённое время и делала бы примерно следующее: begin tran insert [итоговая таблица] select getdate(), [канал], sum([данные]) from [основная таблица] group by [канал] delete [основная таблица] commit tran таблицу можно не тереть, а просто ставить какой-нибудь флаг у записей. 2. Взять за базу некую дату и в итоговой таблице хранить не время, а количество дней от этой даты. Это количество дней вычисляется функцией DATEDIFF, т.е. использовать DATEDIFF(dd,@некая_дата,[дата]) Ну можно и использовать конвертацию через float, но мне кажется не стоит завязываться на внутреннем хранении числа. С приветом Сергей ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2001, 09:54 |
|
Как проще изладить?
|
|||
---|---|---|---|
#18+
А ЧЕГО ТЕБЕ МЕШАЕТ СРАВНИТЬ ДЕНЬ СО ДНЕМ, МЕСЯЦ С МЕСЯЦЕМ А ГОД С ГОДОМ КОЛИ ТАК Declare @ts_not datetime Set @ts_not='СЕГОДНЯ'-1 ........... Where Year(ts_k)=Year(@ts_not) AND Month(ts_k)=Month(@ts_not) and Day(ts_k)=Day(@ts_not) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2001, 11:54 |
|
|
start [/forum/moderation_log.php?user_name=VILARik]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 9823ms |
total: | 9964ms |
0 / 0 |