powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как проще изладить?
11 сообщений из 11, страница 1 из 1
Как проще изладить?
    #32002432
valera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица
[Дата] (datetime)
[Канал]
[Данные]
Данные добавляются каждую минуту.
Надо... По прошествию суток суточные данные перенести в другую (суточную)таблицу той же структуры,но сгруппированые по дате и каналу.
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002433
SAMRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Планируешь задачу, которая будет по расписанию 1 раз в сутки выполнять например процедуру, которая и добавит записи из одной табл в друг, ведь время ты знаешь - какой период в смысле.
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002440
valera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это понятно. Но я хотелбы перенести СГУППИРОВАННЫЕ данные (в этом смысл, ведь минутная таблица растет как на дрожжах), но структура то таблиц одинаковая. А период - прошедшие сутки.
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002444
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искренне не понимаю в чем проблемма. Что мешает их СГРУППИРОВАТЬ?
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002445
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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))
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002448
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заранее извиняюсь, поскольку мой ответ можно посчитать повтором

я бы использовал конструкцию вида:
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 целая часть - это дни а дробная время в переделах суток
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002449
Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S.
поскольку нужны прошедшие сутки вместо
WHERE FLOOR(CONVERT(FLOAT, [Дата])) = FLOOR(CONVERT(FLOAT, @current_date))
нужно написать
WHERE FLOOR(CONVERT(FLOAT, [Дата])) = FLOOR(CONVERT(FLOAT, GATEDATE()) - 1)
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002450
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Denis
> Дело в том, что при представлении даты в виде float целая часть - это дни а дробная время в переделах суток

Togda uz srazu CONVERT(INT, [Дата])
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002456
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если использовать последнии рекомендации, то можно заметить что время до обеда и после обеда сконвертируется в разные числа.

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, но мне кажется не стоит завязываться на внутреннем хранении числа.

С приветом Сергей
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002458
SAMRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ЧЕГО ТЕБЕ МЕШАЕТ СРАВНИТЬ ДЕНЬ СО ДНЕМ, МЕСЯЦ С МЕСЯЦЕМ А ГОД С ГОДОМ КОЛИ ТАК
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)
...
Рейтинг: 0 / 0
Как проще изладить?
    #32002461
valera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работает. Всем большое СПАСИБО !!!!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как проще изладить?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]