Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5   вперед  Ctrl      все
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
отя в таблице есть первая 1 потом 0 потом три 1...должна выдать по всем единицам а тут

Кто-то уверял, что у вас там даты. А по факту - какие то числа
26 сен 12, 09:22    [13222846]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
use [iliar_test]
go
DECLARE @Result int
DECLARE @Start int
DECLARE @Stop int
DECLARE @time int
DECLARE @value int
DECLARE @dvig int
DECLARE @id int
SET @time = ''
SET @dvig = 0

DECLARE cursor_checkArea CURSOR FOR
SELECT * FROM ilik_DB1

OPEN cursor_checkArea

FETCH NEXT FROM cursor_checkArea INTO @id,@time,@value

WHILE @@FETCH_STATUS = 0 BEGIN

IF @value = 1 and @dvig=0

SET @Start = @time
ELSE
SET @Stop = @time


SET @Result = @Stop-@Start


FETCH NEXT FROM cursor_checkArea INTO @id,@time,@value

END

CLOSE cursor_checkArea
DEALLOCATE cursor_checkArea
select @Start,@Stop,@Result
26 сен 12, 09:23    [13222847]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
Glory
ilik_121188
отя в таблице есть первая 1 потом 0 потом три 1...должна выдать по всем единицам а тут

Кто-то уверял, что у вас там даты. А по факту - какие то числа


unix-time...это секунды...
26 сен 12, 09:24    [13222854]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
SET @Result = @Stop-@Start

Как вы думаете, вот в переменной @Result накопительная сумма или просто разность @Stop-@Start от одного шага цикла ?
26 сен 12, 09:25    [13222858]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
Glory
пропущено...

Кто-то уверял, что у вас там даты. А по факту - какие то числа


unix-time...это секунды...

Круто. Подождем еще пару дней. Может еще какие-то мелкие подробности всплывут.
26 сен 12, 09:26    [13222865]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
хватит издеваться....просто вчера всю ночь сидел читал...что то накидал исправил не без вашей помощи..спасибо конечно...но все же хотелось грамотности исправления и т.д. не хочется видеть уродливый код...хочу помощи в решении данной задачи..спс заранее...
26 сен 12, 09:42    [13222941]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
кому удобно смотрите так

К сообщению приложен файл. Размер - 45Kb
26 сен 12, 09:46    [13222969]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
Люди прогеры у кого нить есть предложения?
26 сен 12, 10:11    [13223153]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
ау
26 сен 12, 11:31    [13223862]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
ilik_121188
я не программист...
предлогаю курсор+ваил..помогите набросать код..просто время поджимает надо доделать встал с датами
с датами проблема
Перенесите в форум Работа.
26 сен 12, 11:41    [13223961]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
я уже все сам сделал прошу помочь где не правильно.......
26 сен 12, 11:42    [13223976]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
iap
Поправка (Чтобы учесть первую единицу, добавил первый 0 с той же датой и поправил условие в WHERE):
DECLARE @T TABLE(ID INT, D DATETIME, [State] INT);
INSERT @T(ID,D,[State])VALUES
 (0,'20120629 12:30',0)
,(1,'20120629 12:30',1)
,(2,'20120629 13:30',0)
,(3,'20120629 14:30',0)
,(4,'20120629 15:30',1)
,(5,'20120629 16:30',1)
,(6,'20120629 17:30',1)
,(7,'20120629 18:30',0);

SELECT
 [From]=T.D
,[To]=(SELECT TT.D FROM @T TT WHERE TT.D>T.D AND TT.[State]=0 AND NOT EXISTS(SELECT * FROM @T TTT WHERE TTT.D>T.D AND TTT.D<TT.D AND TTT.[State]=0))
,[Period]=CONVERT(VARCHAR,(SELECT TT.D FROM @T TT WHERE TT.D>T.D AND TT.[State]=0 AND NOT EXISTS(SELECT * FROM @T TTT WHERE TTT.D>T.D AND TTT.D<TT.D AND TTT.[State]=0))-T.D,8)
FROM @T T
WHERE [State]=0 AND (SELECT TOP(1) TT.[State] FROM @T TT WHERE TT.ID<>T.ID AND TT.D>=T.D ORDER BY TT.D)=1;


спс решение помогло...объяснение что тут по чем?начиная с селекта многое непонятно
26 сен 12, 12:31    [13224444]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
ilik_121188
начиная с селекта многое непонятно
Есть курсы по базовым основам программирования и базам данным в частности.
Можно нанять работника, который сделает необходимую работу.
26 сен 12, 12:42    [13224547]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
ilik_121188
iap
Поправка (Чтобы учесть первую единицу, добавил первый 0 с той же датой и поправил условие в WHERE):
DECLARE @T TABLE(ID INT, D DATETIME, [State] INT);
INSERT @T(ID,D,[State])VALUES
 (0,'20120629 12:30',0)
,(1,'20120629 12:30',1)
,(2,'20120629 13:30',0)
,(3,'20120629 14:30',0)
,(4,'20120629 15:30',1)
,(5,'20120629 16:30',1)
,(6,'20120629 17:30',1)
,(7,'20120629 18:30',0);

SELECT
 [From]=T.D
,[To]=(SELECT TT.D FROM @T TT WHERE TT.D>T.D AND TT.[State]=0 AND NOT EXISTS(SELECT * FROM @T TTT WHERE TTT.D>T.D AND TTT.D<TT.D AND TTT.[State]=0))
,[Period]=CONVERT(VARCHAR,(SELECT TT.D FROM @T TT WHERE TT.D>T.D AND TT.[State]=0 AND NOT EXISTS(SELECT * FROM @T TTT WHERE TTT.D>T.D AND TTT.D<TT.D AND TTT.[State]=0))-T.D,8)
FROM @T T
WHERE [State]=0 AND (SELECT TOP(1) TT.[State] FROM @T TT WHERE TT.ID<>T.ID AND TT.D>=T.D ORDER BY TT.D)=1;


спс решение помогло...объяснение что тут по чем?начиная с селекта многое непонятно
Вот я уже второй день думаю, что и с последней строкой надо поступить так же, как с первой. Симметрично.
Ибо вдруг последняя строка - 1 ?
26 сен 12, 12:44    [13224560]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
iap
ilik_121188
пропущено...


спс решение помогло...объяснение что тут по чем?начиная с селекта многое непонятно
Вот я уже второй день думаю, что и с последней строкой надо поступить так же, как с первой. Симметрично.
Ибо вдруг последняя строка - 1 ?


да это вопрос первый так как будет чередоваться
и еще как мне все это перевести в таблицу так как создал таблицу и непонятно где строки где столбцы...
создал таблицу T
ID D State
не работает что надо исправить?
просто мне надо чтоб считывала с таблицы спс большое
26 сен 12, 12:51    [13224643]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
нашел неправильный подсчет
т.е. видно при смене 0 на 1 время работы 1 час а программа считает как 2 часа период
прокомментируйте автор
спс большое

К сообщению приложен файл. Размер - 52Kb
26 сен 12, 13:40    [13225212]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
в 9:30 сигнал рубанулся включился в 10:30 и отключился в 11:30 всего час работы
26 сен 12, 13:55    [13225401]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
а если задать первую единицы то программа считает только разницу первых единици..остальных трех единиц пропускает..спс большое жду ответа
26 сен 12, 13:59    [13225449]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iiyama
Member

Откуда:
Сообщений: 642
ilik_121188,

DECLARE @T TABLE(ID INT, D DATETIME, [State] INT);
INSERT @T(ID,D,[State])VALUES
 (0,'20120629 9:30',0)
,(1,'20120629 10:30',1)
,(2,'20120629 11:30',0)
,(3,'20120629 12:30',0)
,(4,'20120629 13:36',1)
,(5,'20120629 16:30',1)
,(6,'20120629 17:30',1)
,(7,'20120629 18:30',0);

;with T AS
(
select ROW_NUMBER() over(order by D ASC) AS N, *
from
(
	select * from @T
	except
	select T1.* from @T T1	
		inner join @T T2 ON T1.ID=T2.id+1
	where T1.[State] = T2.[State]
)TT
)
select 
	T1.D AS [StartTime],
	T2.D AS [StopTime],
	DATEDIFF(mi,T1.D, T2.D) as [Time]
	,CASE T1.[State] WHEN 1 THEN 'ON' ELSE 'OFF' END AS [Mode]
		 	 
from T T1
	LEFT JOIN T T2 ON T1.N=T2.N-1


PS. Извиняюсь если что, 4 страницы не читал, но Вас уже просили правильно оформлять свои посты?
26 сен 12, 14:14    [13225597]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
спс...большое...да..но можете поправить если не правильно оформлял я тут новенький...просто самому интересно решить задачу..
мне нужно значение под значением ON т.е. время работы....и еще поправка но выходит NULL 5 строчка

К сообщению приложен файл. Размер - 31Kb
26 сен 12, 14:23    [13225673]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
показывать только под значение ON
26 сен 12, 14:24    [13225690]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iiyama
Member

Откуда:
Сообщений: 642
ilik_121188,

DECLARE @T TABLE(ID INT, D DATETIME, [State] INT);
INSERT @T(ID,D,[State])VALUES
 (0,'20120629 9:30',0)
,(1,'20120629 10:30',1)
,(2,'20120629 11:30',0)
,(3,'20120629 12:30',0)
,(4,'20120629 13:36',1)
,(5,'20120629 16:30',1)
,(6,'20120629 17:30',1)
,(7,'20120629 18:30',0);

;with T AS
(
select ROW_NUMBER() over(order by D ASC) AS N, *
from
(
	select * from @T
	except
	select T1.* from @T T1	
		inner join @T T2 ON T1.ID=T2.id+1
	where T1.[State] = T2.[State]
)TT
)
select 
	T1.D AS [StartTime],
	T2.D AS [StopTime],
	DATEDIFF(mi,T1.D, T2.D) as [Time]
	,CASE T1.[State] WHEN 1 THEN 'ON' ELSE 'OFF' END AS [Mode]
		 	 
from T T1
	LEFT JOIN T T2 ON T1.N=T2.N-1
where T1.[State]=1


PS. Ваши скриншоты никому не интересны, вставляйте пожалуйста код посредством тега SRC
26 сен 12, 14:31    [13225761]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
сорри больше не буду просто чтоб понятнее было
26 сен 12, 14:35    [13225794]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iiyama
Member

Откуда:
Сообщений: 642
ilik_121188,
PPS, NULL отображается когда не определено время окончания процесса, например мотор включен и работает до сих пор
26 сен 12, 14:36    [13225801]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
супер а время выводиться может в понятном формате дат?или нет?типа...26.09.2012 14:35:26 спасибо за поддержку...что не стебетесь
26 сен 12, 14:38    [13225824]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить