Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
palem Member Откуда: Сообщений: 13 |
Доброго времени! ~~~ Опрашиваем приборы учета, храним значения в БД в виде получасовок, за сутки на один прибор учета приходится 48-записей (48-получасовок в сутках), подскажите пожалуйста каким образом составить заброс на выборку чтобы получить часовые значения (складывая 2 получасовки в час)? |
11 сен 12, 13:01 [13145344] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
"Получасовка" - это такой тип данных что ли ? |
||
11 сен 12, 13:04 [13145369] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
GROUP BY Забанить надо за |
11 сен 12, 13:07 [13145398] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Не, ну представь, что тут остались ты да я, да иные "тока отвечающие" - чо делать то будем? |
||
11 сен 12, 14:09 [13145899] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
![]() А вообще когда нормальные вопросы подымаются многие ("тока отвечающие") голову в песок прячут ![]() FAQ допиливать, в бложек писать ... Если на форуме затишье, может это повод заняться чем-то более полезным, а не в детсад скатываться. Каждому своё место, чё всё до кучи мешать. Но если вам так нраица (отдушина) - ваше дело. Против толпы не попрёшь. Меня лично очень напрягает подход "пользуюсь тем чего понимать не хочу" жутко бесит это гуманитарная тупизна времён неандертальцев. Не профессионально. А детишек воодушевлять не ответами "на конкретный вопрос", а красивыми решениями правильного подхода (далеко не уровня SQL) и где личное присутствие более желательно. IMXO |
||
11 сен 12, 15:32 [13146739] Ответить | Цитировать Сообщить модератору |
trew Member Откуда: Москва Сообщений: 2646 |
palem,/* DECLARE @tab TABLE (nn INT, d1 INT) INSERT INTO @tab ( nn, d1 ) VALUES ( 1, 30) -- получасы (1) и минуты (30) INSERT INTO @tab ( nn, d1 ) VALUES ( 2, 60) INSERT INTO @tab ( nn, d1 ) VALUES ( 3, 90) INSERT INTO @tab ( nn, d1 ) VALUES ( 4, 120) INSERT INTO @tab ( nn, d1 ) VALUES ( 5, 150) INSERT INTO @tab ( nn, d1 ) VALUES ( 6, 180) INSERT INTO @tab ( nn, d1 ) VALUES ( 7, 210) */ --SELECT dateadd(day,datediff(day,(0),GETDATE()),(0)) DECLARE @tab_date TABLE (dd smalldatetime) INSERT INTO @tab_date (dd ) VALUES ('20120911 00:24:12.120') INSERT INTO @tab_date (dd ) VALUES ('20120911 01:45:12.120') INSERT INTO @tab_date (dd ) VALUES ('20120911 18:45:12.089') INSERT INTO @tab_date (dd ) VALUES ('20120911 23:45:12.089') SELECT dd, 1+ DATEDIFF(MI, dateadd(day,datediff(day,(0),GETDATE()),(0)), dd) AS minut, 1 + (DATEDIFF(MI, dateadd(day,datediff(day,(0),GETDATE()),(0)), dd)/30) AS half_hour FROM @tab_date |
11 сен 12, 17:07 [13147573] Ответить | Цитировать Сообщить модератору |
Зайцев Фёдор Member Откуда: Лужки Сообщений: 5308 |
на выборку из чего? где структура, пример данных и эталонный результат? |
||
11 сен 12, 17:16 [13147629] Ответить | Цитировать Сообщить модератору |
thrashead Member Откуда: Россия, Санкт-Петербург Сообщений: 722 |
Зайцев Фёдор, Прочитав и перечитав "описание" от ТС, предполагаю, что на самом деле всё выглядит примерно так: declare @table1 table ( [device_id] int NULL, [somedate] datetime NULL, [value] decimal(38,19) NULL ); declare @i int, @startdate datetime, @somedate datetime, @somevalue decimal(38,19) ; set @startdate = '2012-09-11 00:00:00.000'; set @i = 0; while @i <= 47 begin set @somedate = dateadd(minute,30*@i,@startdate); set @somevalue = rand(); insert into @table1 (device_id, somedate, value) values (1, @somedate, @somevalue); set @i = @i + 1; end; select * from @table1; |
11 сен 12, 17:35 [13147743] Ответить | Цитировать Сообщить модератору |
thrashead Member Откуда: Россия, Санкт-Петербург Сообщений: 722 |
Зайцев Фёдор, вар2: declare @table1 table ( [device_id] int NULL, [somedate] datetime NULL, [value] decimal(38,19) NULL ); declare @i int, @startdate datetime, @enddate datetime, @currentdate datetime, @somevalue decimal(38,19), @increment int ; set @startdate = '2012-09-11 00:00:00.000'; set @enddate = dateadd(day,1,@startdate); set @currentdate = @startdate; while @currentdate <= @enddate begin set @somevalue = rand(); insert into @table1 (device_id, somedate, value) values (1, @currentdate, @somevalue); set @increment = cast(rand()*300 as int); set @currentdate = dateadd(second,@increment,@currentdate); end; select * from @table1; select sq.datehour, sum(sq.value) as hour_sum from ( select t.value, datepart(hour,t.somedate) as datehour from @table1 as t) as sq group by sq.datehour; |
11 сен 12, 17:54 [13147839] Ответить | Цитировать Сообщить модератору |
Зайцев Фёдор Member Откуда: Лужки Сообщений: 5308 |
я себе это примерно так представляю with Device as ( select * from (values(1), (2), (3)) Q(deviceID) ), DT as ( select n = 1, dt = getdate() union all select n = n + 1, dt = dateadd(minute, 30, dt) from DT where n < 48 ), data as ( select A.deviceID, B.dt, value = A.deviceID + B.n from Device A cross join DT B ) select deviceID, dt = dateadd(hour, datediff(hour, '', dt), ''), value = sum(value) from data group by deviceID, dateadd(hour, datediff(hour, '', dt), '') order by 1, 2 |
|||
11 сен 12, 18:42 [13148130] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
накуя пудрить неокрепший моск тестовыми скриптами?SELECT D.DeviceID ,X.[Hour] ,Sum(D.Value) AS Value FROM dbo.Data D CROSS APPLY (SELECT DateAdd(Hour,DateDiff(Hour,0,D.DT),0) ) X ([Hour]) GROUP BY DeviceID ,X.[Hour]Вместо бы этого показали пример правильной стилистики, а не распространяли своё месиво неправильного форматирования и использования. Алиасы надо писать всегда, не Copy&Past-ить (использовать APPLY). А данные можно заполнять используя master.dbo.sp_values или директиву GO <Num> |
11 сен 12, 21:29 [13148662] Ответить | Цитировать Сообщить модератору |
Зайцев Фёдор Member Откуда: Лужки Сообщений: 5308 |
снимаю шляпу! после такого мастера пудрить моск я бы решился ))
именно вместо этого и показали ) |
||||
12 сен 12, 01:24 [13149211] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Столько пафоса, но при этом нуль конкретики. Это как услышать одинокий смех в зале. Дет сад. |
||
12 сен 12, 10:38 [13150129] Ответить | Цитировать Сообщить модератору |
Зайцев Фёдор Member Откуда: Лужки Сообщений: 5308 |
ок, смешно конкретно это
|
||||||
12 сен 12, 10:49 [13150202] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Зайцев Фёдор,
Или вы подумали что я имею ввиду именно только табуляцию, запятые ...? Не это чисто пример, за форматирование драться бесполезно. |
||||
12 сен 12, 15:10 [13152286] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Ничего, что все примеры просуммируют часы от разных суток ? select convert(datetime, convert(varchar(14),GETDATE(),120)+'00',120) |
12 сен 12, 15:16 [13152356] Ответить | Цитировать Сообщить модератору |
Зайцев Фёдор Member Откуда: Лужки Сообщений: 5308 |
ТС указал, что "за сутки на один прибор учета приходится 48-записей (48-получасовок в сутках)", но нигде не сказано, 1) что начало и конец суток (промежутка времени) непременно в одной дате 2) что час datepart(hour, mydate), а не момент времени т.о. да, всё нормально |
||
12 сен 12, 15:32 [13152500] Ответить | Цитировать Сообщить модератору |
Зайцев Фёдор Member Откуда: Лужки Сообщений: 5308 |
IMHO, связь между Copy&Past и APPLY не совсем очевидна предполагая, что под APPLY скрывается CROSS/OUTER APPLY
Или вы подумали что я имею ввиду именно только табуляцию, запятые ...?[/quot] честно говоря, да, именно так и подумал. не сразу понял, что речь шла о замене dateadd(hour, datediff(hour, '', dt), '') на X.[Hour], что позволило бы заменить - в этом случае мне как бы не лениво было писать ORDER BY многабукаф я в любом случае не предложил бы APPLY (не относится к стилю), а любые претензии к стилю за пределами (из-за пределов) моей команды считаю странными. |
||||||
12 сен 12, 15:56 [13152675] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Очень необходимый костыль для обхода плохой архитектуры языка. Меня вообще поражает невероятная однобокость развития. Разнообразия недоразвитых языков полукровок тысчи (от Сей до C#, от JS до ...), постоянно появляются, постоянно "развиваются", а декларативные и в частности SQL - обделили вниманием практически полностью. Все эти нововведения должны были лет 15 назад появится. Признать что синтаксис говно, но некому - все считают фантики. |
||
12 сен 12, 23:39 [13154998] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |