Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите, где ошибка??????  [new]
Юлька_
Member

Откуда:
Сообщений: 14
USE [sutki]
GO
/****** Object: StoredProcedure [dbo].[sutki_day] Script Date: 03/13/2013 11:38:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sutki_day]
@Dt SMALLDATETIME, 
@attr_id INT, 
@Value real
AS
 SET NOCOUNT ON
 ------------------------
 DECLARE @MAXTIME SMALLDATETIME
 DECLARE @Q SMALLDATETIME
 DECLARE @T SMALLDATETIME
 DECLARE @E SMALLDATETIME

 
SET @Q = GETUTCDATE()
 SET @T = DATEADD(DAY, DATEDIFF(DAY, 0, @Q), 20)
 SET @E = DATEADD(DAY,1,@T)

 
if @Q<=@T and @attr_id = 11112
 BEGIN
 select SUM([Value]) as DailyValue
 from [Baza].[dbo].[Gaz] where ([Dt] = @Dt) and ([Attr_ID] = 11000)
 ----------------------------
 IF EXISTS(SELECT * FROM [dbo].[sutki_data] WHERE ([Dt] = @Dt) AND ([attr_id] = @attr_id))
 BEGIN
 UPDATE [dbo].[sutki_data] SET [Value] = @Value WHERE ([Dt] = @Dt) AND ([Attr_id] = @Attr_id)
 END
 ELSE
 BEGIN
 INSERT [dbo].[sutki_data] ([Dt], [Attr_id], [Value]) VALUES (@Dt, 11112, @Value)
 END 
----------------------------
 END

У меня результат не выходит :(


А должно быть так:
Мне нужно написать хранимую процедуру, для того что бы из одной базы данных Baza таблица Gaz брался определенный параметр ГАЗ (11000) складывался за 24 часа и сумма данных складывалась в другую базу данных Sutki таблица sutki_data. Должно это выглядеть как-то так: Если время = 2 часа ночи, тогда вставляем сумму за 24 часа (ГАЗ за 2+ГАЗ за3+ГАЗ за4+ ГАЗ за5+ ГАЗ за6+ ГАЗ за7+ ГАЗ за8+ ГАЗ за9+ ГАЗ за10+ ГАЗ за11+ ГАЗ за12+ ГАЗ за13+ ГАЗ за14+ ГАЗ за15+ ГАЗ за16+ ГАЗ за17+ ГАЗ за18+ ГАЗ за19+ ГАЗ за20+ ГАЗ за21+ ГАЗ за22+ ГАЗ за23+ ГАЗ за00+ ГАЗ за1+ ГАЗ за2: с 2-х до 2-х) иначе ничего не происходит. Время в sql у меня отображается по Гринвичу (+6).

Таблицы имеют идентичные поля (таблица gaz заполненная часовыми значениями, а sutki - пустая): dt (дата), attr_id (какое-то число идентификатор, присваивамое напимер газ 11000), value (значение параметра)

Сообщение было отредактировано: 25 мар 13, 13:29
14 мар 13, 06:39    [14045527]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Юлька_
 select SUM([Value]) as DailyValue
 from [Baza].[dbo].[Gaz] where ([Dt] = @Dt) and ([Attr_ID] = 11000)

Этот оператор у вас с какой целью находится в процедуре?
14 мар 13, 09:35    [14045866]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Юлька_
Member

Откуда:
Сообщений: 14
Я расчитывала, что этот оператор складывает данные с 02 часов до 02! SUM это же сумма!!! Подскажите как правильно это описать, что бы хранимая процедура корректно заработала!
14 мар 13, 11:20    [14046412]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Юлька_
Я расчитывала, что этот оператор складывает данные с 02 часов до 02! SUM это же сумма!!!

Складывает, только не "с 02 часов до 02", а лишь по тем записям, в которых дата и время совпадают с @Dt. Результат сложения по задумке должен был помещаться в некую переменную? Для этого нужно делать так:
SELECT @ИмяПеременной = SUM(...)
FROM ...

А с какими значениями параметров вы вызываете вашу процедуру?
14 мар 13, 11:56    [14046638]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
если данных за 02:00 нет, но есть за остальной период (с 02:00:01 по 01:59:59) - их игнорировать? или все же записывать в данные на 02:00 ?
+ суммирование за сутки, начинающиеся с 02:00 с обновлением через MERGE
-- Подготовка тестовых данных
declare @sutki table (dt datetime, attr int, value real, primary key (attr, dt))
insert @sutki VALUES 
   ('20111231 02:00',11000,0.001),
   ('20120101 02:00',11000,10000),
   ('20120101 02:00',12000,0.0001)
declare @gaz table (dt datetime, attr int, value real, primary key (attr, dt))
insert @gaz values
   ('20120101 01:00:00', 11000, 0.01),
   ('20120101 01:59:59', 11000, 0.1),
   ('20120101 02:00:00', 11000, 1),
   ('20120101 09:00:00', 11000, 10),
   ('20120102 01:59:59', 11000, 100),
   ('20120102 02:00:00', 11000, 1000),
   ('20120102 03:00:00', 11000, 10000),
   ('20120101 12:00:00', 12000, 100000)
select * from @sutki order by attr, dt

-- параметры расчета
declare @Dt SMALLDATETIME, @attr_id INT
select @Dt='20120101 02:00', @attr_id=11000
-- выполнение расчета
merge @sutki s
using(
   select attr, date_0200, SUM(value) value
   from @gaz 
   cross apply (select DATEADD(HOUR,2,CONVERT(datetime,CONVERT(date,DATEADD(HOUR,-2,dt))))date_0200 ) c
   where (@attr_id is null or attr=@attr_id) and (@Dt is null or date_0200=@Dt)
   group by attr, date_0200
   ) g 
on g.date_0200=s.dt and g.attr=s.attr
when matched then
   update set value=g.value
when not matched then
   insert (dt,attr,value) values(g.date_0200, g.attr, g.value);

-- контроль результата
select * from @sutki order by attr, dt
14 мар 13, 12:25    [14046815]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Юлька_
Member

Откуда:
Сообщений: 14
Cygapb-007, ух ты!!!!!!!!! Спасибо громное!!!! Я попробую сейчас!!!!
14 мар 13, 12:42    [14046942]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Юлька_
Member

Откуда:
Сообщений: 14
Гость333, я обозначала!!! У меня почему-то SUM красным начал подчеркивать! Incorect syntax писал!
14 мар 13, 12:43    [14046960]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Юлька_
Member

Откуда:
Сообщений: 14
Cygapb-007
если данных за 02:00 нет, но есть за остальной период (с 02:00:01 по 01:59:59) - их игнорировать? или все же записывать в данные на 02:00 ?

[/src][/spoiler]


данные записывать на 02:00!!!!
14 мар 13, 12:44    [14046972]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Юлька_
Member

Откуда:
Сообщений: 14
Не помогло :( Данные не складываются! Подскажите в чем же проблема! Где что не так?
25 мар 13, 09:59    [14090745]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Юлька_
Подскажите в чем же проблема!

Наверное, в том, что тут не форум телепатов и мы не можем угадать нынешний текст вашего запроса/батча/процедуры/etc? ;-)
Поэтому, может, вы по старинке тут его выложите? :)
25 мар 13, 12:04    [14091379]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, где ошибка??????  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Юлька_
Не помогло :( Данные не складываются! Подскажите в чем же проблема! Где что не так?
Может в том, что в запросе в параметрах задаются даты вида '20120101 02:00', а не '20120101' ? Легко лечится командой
set @Dt=dateadd(hour,2,convert(datetime,convert(date,@Dt)))
25 мар 13, 13:25    [14091864]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить