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

Откуда:
Сообщений: 89
DECLARE @time1 smalldatetime
DECLARE @time2 smalldatetime
DECLARE @value int


SET @time1 = ''
SET @time2 = ''

DECLARE cursor_checkArea CURSOR FOR
SELECT *

FROM tab1
WHERE value = true

OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @time1,
@time2


WHILE( @@FETCH_STATUS = 0 )
BEGIN

IF(
@time1 = 1

)
set
else
set

надо узнать время т.е. таблица
id time value
1 13:40 1
2 14:10 1
3 15:30 0
надо выбрать время где валуе единица и узнать рабочий промежуток времени....через ваил...т.е... если единица то заносится в таим1 идет дальше если 1 записывает дальше если 0 то тормозит и отнимает предыдушее от перепредыдущего и т.д.
25 сен 12, 09:48    [13216673]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
Пациент неизлечим
25 сен 12, 10:23    [13216895]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
ПОМОГИТЕ ХВАТИТ СТЕБАТЬСЯ АУУУ!!!!!!
25 сен 12, 10:45    [13217069]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
ПОМОГИТЕ ХВАТИТ СТЕБАТЬСЯ АУУУ!!!!!!

И что непонятно из предыдущей вашей темы ?
Что конкретно у вас не получается сделать в вашем курсоре ?
25 сен 12, 10:46    [13217075]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
СМОТРИ НАДО ВЫЧИСЛИТЬ РАБОТУ ДВИГАТЕЛЯ..1 РАБОТАЕТ 0 НЕ РАБОТАЕТ
12.30 ПРИШЕЛ СИГНАЛ ВЛК Т.Е.1
В 12 31 ПРИШЕЛ СИГНАЛ ВЫКЛ Т.Е. 0
12.31-1230= 0001 МИН
ВОТ КАК ТО ТАК
КУРСОВ+ВАИЛ ГОВОРЯТ ПРОСТО Я УЖЕ УСТАЛ ТУПИТЬ

ПОМОГИТЕ ДЕЛОМ НЕ СМЕЙТЕСЬ РЕАЛЬНО НАЧИНАЮЩИЙ
25 сен 12, 10:49    [13217104]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
Id time value
1 10:30 1
2 11:30 1
3 12:30 1
4 14:30 0
СКРИНОВ НЕТ ПРИМЕРНО ПОКАЖУ
Id time value
1 10:30 1
2 11:30 0
3 12:30 0
4 14:30 1
МОЖЕТ БЫТЬ И ТАК
ВЫРУЧИТЕ
25 сен 12, 10:51    [13217116]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
ПОМОГИТЕ ДЕЛОМ НЕ СМЕЙТЕСЬ РЕАЛЬНО НАЧИНАЮЩИЙ

- В предыдущей теме вам привели ссылки. вы их читали ?
- Зачем открывать еще одну тему по тому же вопросу
- Зачем ОРАТЬ ?
- Что именно у вас не получается в вашем курсоре ?
25 сен 12, 10:57    [13217157]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
да смотрел подходящего ничего нет
мне надо курсор с циклом...никак не могу определиться с созданием курсора..какие переменные нужны..и как корректно создать цикл чтоб работало все...
12.31-1230= 0001 МИН т.е надо время работы двигателя 1 мин представляю так программи видит 1 идет дальше видит еще одну идет дальше видит нот отправляет данные время и отнимает от себя время первой единички т.е. первого включение на выходе получем время работы движка
СОРРИ за поведение просто реально надо а они стебаются спс
25 сен 12, 11:01    [13217182]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
да смотрел подходящего ничего нет

Вот итнересно, а как вы это установили. Вот так вот посмотрели на код и решили ?

ilik_121188
никак не могу определиться с созданием курсора..какие переменные нужны..и как корректно создать цикл чтоб работало все...

Т.е. вы даже не знаете, по какому алгоритму хотите решать задачу ?
25 сен 12, 11:06    [13217229]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
я не программист...
предлогаю курсор+ваил..помогите набросать код..просто время поджимает надо доделать встал с датами
с датами проблема
25 сен 12, 11:08    [13217248]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

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

Код набрасывают по выбранному алгоритму.
Который сначала придумывают
А не наоборот - какой то код подгоняют под выдачу какиих то результатов
25 сен 12, 11:17    [13217304]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
ну вот таблица
Id time value
1 10:30 1
2 11:30 1
3 12:30 1
4 14:30 0
СКРИНОВ НЕТ ПРИМЕРНО ПОКАЖУ
Id time value
1 10:30 1
2 11:30 0
3 12:30 0
4 14:30 1
МОЖЕТ БЫТЬ И ТАК

надо вычитать рабочие часы дрыгателя....по значению валуе 1..т.е смотря первую таблицу должно получится так что дрыгатель работал 14 30- 10 3- = 4 часа так как в 14 30 пришел сигнал 0 отк
25 сен 12, 11:25    [13217357]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
надо вычитать рабочие часы дрыгателя....по значению валуе 1..т.е смотря первую таблицу должно получится так что дрыгатель работал 14 30- 10 3- = 4 часа так как в 14 30 пришел сигнал 0 отк

Вот напишите словами, как бы вы из вашего примера получили нужный вам результат
Это и будет алгоритм.
Для которого можно "набросать код"
25 сен 12, 11:28    [13217390]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
ну программа фиксирует старт идет дальше видит значение 1 идет дальше видит значение 0 фиксирует время потом отнимает это врмя от времени первой единицы т.е. время остановки..получается так StopTime-StartTime=Мой результат отобранный по значению 1
главное чтоб была универсальная .т.е работа с переменными спс за поправку..просто хочу помощи
25 сен 12, 11:32    [13217428]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
ну программа фиксирует старт идет дальше видит значение 1 идет дальше видит значение 0 фиксирует время потом отнимает это врмя от времени первой единицы т.е. время остановки..получается так StopTime-StartTime=Мой результат отобранный по значению 1
главное чтоб была универсальная .т.е работа с переменными спс за поправку..просто хочу помощи

Ваш курсор сверху вполне подходит
Только вам нужна еще одна переменная. Для того, чтобы сохранить значение из value для _предыдущей_ записи. И сравнить его со значением из текущей записи.
25 сен 12, 11:42    [13217496]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
можно подробнее?как подходит там же нет цикла((((отпишитесь пожалуйста подробнее...так как время жмет
25 сен 12, 11:47    [13217534]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
как подходит там же нет цикла

А что такое WHILE по-вашему ?

ilik_121188
отпишитесь пожалуйста подробнее...так как время жмет

Если вам нужен готовый работающий код под ключ, то наймите кого-нибудь за деньги.
Если вы хотите научиться, то придется поработать самому. И головой и руками.
25 сен 12, 11:50    [13217565]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
что не так?не работает (((((((стараюсь стараюсь и не выходит(((

К сообщению приложен файл. Размер - 59Kb
25 сен 12, 11:56    [13217638]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
что не так?не работает

"Не работает" - Это вы цитируете сообщение об ошибке ?
25 сен 12, 11:58    [13217653]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
не дает нужный результат...как здесь примастить то что бы даты отнимались...?друг от дружки?
25 сен 12, 12:01    [13217692]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
как здесь примастить то что бы даты отнимались..

Используйте _документированные_ функции
DATEDIFF например
25 сен 12, 12:08    [13217762]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
посмотрите пожалуйста как то так но все равно не работает поправьте если не трудно..и как используется datadiff?куда вставить?спс большое за помошь...

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

Откуда:
Сообщений: 89
что исправить дабы не казаться чайником?
25 сен 12, 12:14    [13217851]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37083
Уважаемый ilik_121188. Освойте уже кнопки ctrl+c и ctrl+v. Ваши скриншоты никому здесь не нужны.
25 сен 12, 12:15    [13217860]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
хотелось бы понять почему не работает?просто уже исчерпал все свои мозговые данные
25 сен 12, 12:16    [13217869]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
что исправить дабы не казаться чайником?

Исправить свои знания.
Скачать хелп.
Изучить синтаксис команд.
Рассмотреть примеры из хелпа
25 сен 12, 12:17    [13217873]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
DECLARE @Result smalldatetime
DECLARE @Start smalldatetime
DECLARE @Stop smalldatetime
DECLARE @time1 smalldatetime
DECLARE @time2 smalldatetime
DECLARE @value int
SET @time1 = ''
SET @time2 = ''
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1
OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @time1,@time2
WHILE( @@FETCH_STATUS = 0 )
BEGIN
IF(
@value = 1
		set @Start=@time1
	else
		set @Stop=@time2
		set @Result=@Stop-@Start
	FETCH NEXT FROM cursor_checkArea                                                                           
		INTO		@Result,
					@Start,
					@Stop,
					@time1,
					@time2,
					@value					
	END
	CLOSE cursor_checkArea
	DEALLOCATE cursor_checkArea


Сообщение было отредактировано: 25 сен 12, 12:17
25 сен 12, 12:17    [13217874]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37083
ilik_121188
хотелось бы понять почему не работает?просто уже исчерпал все свои мозговые данные
У вас ошибка в коде.
25 сен 12, 12:17    [13217875]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37083
set @Result=@Stop-@Start -- вот так даты вычитать нельзя, для этого есть специальная функция.
25 сен 12, 12:18    [13217881]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
DECLARE @Result smalldatetime
DECLARE @Start smalldatetime
DECLARE @Stop smalldatetime
DECLARE @time1 smalldatetime
DECLARE @time2 smalldatetime
DECLARE @value int
SET @time1 = ''
SET @time2 = ''
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1
OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @time1,@time2
WHILE( @@FETCH_STATUS = 0 )
BEGIN
IF(
@value = 1
set @Start=@time1
else
set @Stop=@time2
set @Result=@Stop-@Start
FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time1,
@time2,
@value
END
CLOSE cursor_checkArea
DEALLOCATE cursor_checkArea

этот код не компилируется
О каком неправильном результате вы говорите, если код даже не запускается ?
25 сен 12, 12:18    [13217883]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
Гавриленко Сергей Алексеевич,

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

Откуда:
Сообщений: 89
ну вы же сказали что это для меня он не работает...поэтому подумал что выражаюсь неправильно
не сочтите за обман просто подумал что сленг не правельный
25 сен 12, 12:20    [13217898]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

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

Правильный вариант курсора легко увидеть в хелпе.
Вы вообще пользуетесь какими то руководствами ?
25 сен 12, 12:20    [13217902]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
помогите я не очень долго юзаю скуэл...как исправить?какую ф-цию использовать ?
25 сен 12, 12:21    [13217909]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37083
ilik_121188
помогите я не очень долго юзаю скуэл...как исправить?какую ф-цию использовать ?
Об этом вам сказали на предыдущей странице.
25 сен 12, 12:22    [13217919]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
londinium
Member

Откуда: Киев
Сообщений: 1179
IF(
@value = 1
		set @Start=@time1
	else
		set @Stop=@time2


После IF скобку закрывать не пробовали?
25 сен 12, 12:23    [13217930]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
закрыл все равно......помогите люди прогеры...
25 сен 12, 12:28    [13217985]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
закрыл все равно......помогите люди прогеры...

https://www.sql.ru/forum/actualtopics.aspx?bid=9
25 сен 12, 12:29    [13217998]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
londinium
Member

Откуда: Киев
Сообщений: 1179
А теперь вместо
set @Result=@Stop-@Start

напишем
SET @Result=DATEDIFF(MI,@Stop,@Start)
25 сен 12, 12:30    [13218009]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
спс большое но все равно что то не то(((((((((((((
25 сен 12, 12:36    [13218055]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
londinium
Member

Откуда: Киев
Сообщений: 1179
Как-то все мрачно. Вы бы выложили скрипт создания и заполнения таблицы тестовыми данными и текст того, что должно получиться
25 сен 12, 12:38    [13218068]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
londinium
IF(
@value = 1
		set @Start=@time1
	else
		set @Stop=@time2


После IF скобку закрывать не пробовали?
А зачем в IF скобки?
25 сен 12, 12:38    [13218075]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
londinium
Member

Откуда: Киев
Сообщений: 1179
А зачем в IF скобки?
У меня или в глазах двоится, или топикстартер потерял закрывающую скобку.
25 сен 12, 12:40    [13218091]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
получится должно рабочее время двигателя т.е. например 10 мин или 1 час и т.д. 12 30-13 30=1 час
25 сен 12, 12:41    [13218098]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
убрал скобки...не то все люди...хелп ми уже как 3 день ломаю голову
25 сен 12, 12:45    [13218130]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
londinium
А зачем в IF скобки?
У меня или в глазах двоится, или топикстартер потерял закрывающую скобку.
Ну, потерял. Но ведь и открывающая не нужна
25 сен 12, 13:35    [13218562]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
timur999
Member

Откуда:
Сообщений: 355
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1

и
FETCH NEXT FROM cursor_checkArea
INTO @time1,@time2

они точно у Вас вяжутся? Покажите структуру таблицы tab1.
25 сен 12, 13:36    [13218574]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
ilik_121188
DECLARE @Result smalldatetime
DECLARE @Start smalldatetime
DECLARE @Stop smalldatetime
DECLARE @time1 smalldatetime
DECLARE @time2 smalldatetime
DECLARE @value int
SET @time1 = ''
SET @time2 = ''
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1
OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @time1,@time2
WHILE( @@FETCH_STATUS = 0 )
BEGIN
IF(
@value = 1
		set @Start=@time1
	else
		set @Stop=@time2
		set @Result=@Stop-@Start
	FETCH NEXT FROM cursor_checkArea                                                                           
		INTO		@Result,
					@Start,
					@Stop,
					@time1,
					@time2,
					@value					
	END
	CLOSE cursor_checkArea
	DEALLOCATE cursor_checkArea


после @value = 1 поставьте закрывающую скобочку ))))))
25 сен 12, 13:54    [13218734]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
О майн гот!!!
Ну какой-такой курсор-мурсор??
Надо найти разницы во времени между нулями, между которыми есть хотя бы одна единица и нет других нулей?

И ведь, действительно, накидали ссылок

DECLARE @T TABLE(ID INT, D DATETIME, [State] INT);
INSERT @T(ID,D,[State])VALUES
 (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.D>T.D ORDER BY TT.D)=1;
25 сен 12, 14:03    [13218842]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
Поправка (Чтобы учесть первую единицу, добавил первый 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;
25 сен 12, 14:10    [13218905]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
но она же не универсальная(((((((((((
25 сен 12, 14:22    [13219028]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
неужели это так тяжело?
25 сен 12, 14:23    [13219031]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
ilik_121188,

это как понимать? поясните.
25 сен 12, 14:26    [13219062]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
ну надо чтоб с переменными работала..данных то будет много..а у вас там вводить надо цыфры....может куча будет данных
25 сен 12, 14:37    [13219139]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
(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);

рассматривается вариант для этих чисел?
25 сен 12, 14:39    [13219160]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
londinium
Member

Откуда: Киев
Сообщений: 1179
ну надо чтоб с переменными работала..данных то будет много..а у вас там вводить надо цыфры....может куча будет данных
Вас уже третью страницу просят показать скрипт создания таблицы, заполнения ее тестовыми данными и для этих данных правильный ответ
25 сен 12, 14:42    [13219184]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

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

И в чем проблема с этим у предложенного вам варианта решения ?
25 сен 12, 15:13    [13219444]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
(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);

рассматривается вариант только для этих чисел? а у меня двигатель работает автоматически 1 работает 0 не работает и т.п...датчик посылает сигнал все обрабатывается автоматически
25 сен 12, 15:35    [13219620]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
помогите добавить условие

use [iliar_test]
go
DECLARE @Result smalldatetime
DECLARE @Start smalldatetime
DECLARE @Stop smalldatetime
DECLARE @time smalldatetime
DECLARE @time2 smalldatetime
DECLARE @value int
SET @time = ''
SET @time2 = ''
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1
OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time,
@time2,
@value
WHILE( @@FETCH_STATUS = 0 )
BEGIN
IF
@value = 1
set @Start=@time
else
set @Stop=@time2
SET @Result=DATEDIFF(MI,@Stop,@Start)

else if


FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time,
@time2,
@value
END
CLOSE cursor_checkArea
DEALLOCATE cursor_checkArea
25 сен 12, 15:39    [13219651]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
рассматривается вариант только для этих чисел?

А для каких он должен рассматриваться в этом примере ?

ilik_121188
а у меня двигатель работает автоматически 1 работает 0 не работает и т.п...датчик посылает сигнал все обрабатывается автоматически

И какое это отношение имеет к скрипту.
Запрос работает с таблицей на сервере, а не с двигателем и датчиком.
25 сен 12, 15:40    [13219655]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

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

К сообщению приложен файл. Размер - 29Kb
25 сен 12, 15:56    [13219753]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
1й1
Guest
ilik_121188 тебе iap уже итак все сделал, нужно было только подставить имя твоей таблицы и сделать его рекомендацию по корректному набору данных, ниже скрипт с твоей БД и таблицей:

use [iliar_test]
go

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 tab1 TTT WHERE TTT.D>T.D AND TTT.D<TT.D AND TTT.[State]=0))
,[Period]=CONVERT(VARCHAR,(SELECT TT.D FROM tab1 TT WHERE TT.D>T.D AND TT.[State]=0 AND NOT EXISTS(SELECT * FROM tab1 TTT WHERE TTT.D>T.D AND TTT.D<TT.D AND TTT.[State]=0))-T.D,8)
FROM tab1 T
WHERE [State]=0 AND (SELECT TOP(1) TT.[State] FROM tab1 TT WHERE TT.ID<>T.ID AND TT.D>=T.D ORDER BY TT.D)=1;
25 сен 12, 15:56    [13219757]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
use [iliar_test]
go
DECLARE @Result smalldatetime
DECLARE @Start smalldatetime
DECLARE @Stop smalldatetime
DECLARE @time smalldatetime

DECLARE @time2 smalldatetime
DECLARE @value int
SET @time = ''
SET @time2 = ''
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1
OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time,
@time2,
@value
WHILE( @@FETCH_STATUS = 0 )
BEGIN
IF
@value = 1
set @Start=@time
else
set @Stop=@time2
SET @Result=DATEDIFF(MI,@Stop,@Start)

else if


FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time,
@time2,
@value
END
CLOSE cursor_checkArea
DEALLOCATE cursor_checkArea

что тут поправить по блок схеме народ?помоги
25 сен 12, 15:58    [13219767]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
что тут поправить по блок схеме народ?помоги

Взять уже предложенный вариант и подставить туда имена своей таблицы и своих полей.
25 сен 12, 15:59    [13219779]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
спс большое люди а почему мой курсор не пашет?просто интересно не просто же я ломал голову несколько дней...
25 сен 12, 16:00    [13219788]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
чем вам мой курсор не мил?..надо добавить условия всего лишь((((что надо исправить в нем?
25 сен 12, 16:01    [13219797]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
а почему мой курсор не пашет?

Потому что пашет трактор или специальные животные.
А скрипт работает так, как вы его написали.
25 сен 12, 16:02    [13219811]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
1й1
Guest
ilik_121188
спс большое люди а почему мой курсор не пашет?просто интересно не просто же я ломал голову несколько дней...


ты бы еще текст ошибки привел, а то народу влом ванговать.
25 сен 12, 16:02    [13219820]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
таблица
id time value
1 10:30 1
2 11:30 1
3 12:30 1
4 13:30 0

ИСПРАВИЛ КУРСОР

use [iliar_test]
go
DECLARE @Result smalldatetime
DECLARE @Start smalldatetime
DECLARE @Stop smalldatetime
DECLARE @time smalldatetime
DECLARE @time2 smalldatetime
DECLARE @value int
DECLARE @dvig int
SET @time = ''
SET @time2 = ''
DECLARE cursor_checkArea CURSOR FOR
SELECT *
FROM tab1
OPEN cursor_checkArea
FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time,
@time2,
@value
WHILE( @@FETCH_STATUS = 0 )
BEGIN
IF
@value = 1 && @dvig=0
set @Start=@time
else
set @Stop=@time2
SET @Result=DATEDIFF(MI,@Stop,@Start)

else if


FETCH NEXT FROM cursor_checkArea
INTO @Result,
@Start,
@Stop,
@time,
@time2,
@value,
@dvig
END
CLOSE cursor_checkArea
DEALLOCATE cursor_checkArea

НЕ РАБОТАЕТ ПОМОГИТЕ ЛЮДИ КТО ВИДИТ ОШИБКУ....УСТАЛ УЖЕ СПАЧИБО БОЛЬШОЕ КТО НЕ ОСТАЛСЯ В СТОРОНЕ...ВСЕ САСИБО ЕСЛИ БЫ НЕ ВЫ Я...
25 сен 12, 19:01    [13221132]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
ilik_121188,

Сразу скажу, я не вдавался в смысл топика абсолютно. И не вижу смысла этого делать, т.к. вы игнорируете здравые предложения.
Поработаю синтаксическим корректором, просто потому что немного утомило наблюдать эту тему постоянно вверху обсуждаемых.
+ Это хотя бы парсится
DECLARE @Result smalldatetime;
DECLARE @Start smalldatetime;
DECLARE @Stop smalldatetime;
DECLARE @time smalldatetime;
DECLARE @time2 smalldatetime;
DECLARE @value int;
DECLARE @dvig int;
SET @time = '';
SET @time2 = '';

DECLARE cursor_checkArea CURSOR FOR
SELECT * FROM tab1;

OPEN cursor_checkArea;

FETCH NEXT FROM cursor_checkArea INTO @Result,@Start,@Stop,@time,@time2,@value;

WHILE @@FETCH_STATUS = 0 BEGIN

	IF @value = 1 and @dvig=0
		SET @Start = @time;
	ELSE
		SET @Stop = @time2;
		
	SET @Result = DATEDIFF(MI,@Stop,@Start);

	
	FETCH NEXT FROM cursor_checkArea INTO @Result,@Start,@Stop,@time,@time2,@value; --,@dvig; - wtf?
	
END;

CLOSE cursor_checkArea;
DEALLOCATE cursor_checkArea;


Пожалуйста, уважайте других участников форума:
- заключайте код запросов в тег src;
- не пишите капсом
- не пишите в каждом сообщении "помогите", вам и так уже три страницы помогают, причем действительно помогают, вникая в суть, а не как я;
- не надо столько разочарованных смайлов, почти в каждом сообщении, это не контактик, а проф.форум.

Ну и раз вы взялись писать код, разбираться что к чему, хотя бы базовые основы, придется, кол-во сообщений на форуме не приведет к желаемому результату. Кнопки "сделать зашибись" нет.

п.с.
удивляюсь, что тема до сих пор жива...
25 сен 12, 19:19    [13221201]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
londinium
Member

Откуда: Киев
Сообщений: 1179
@value = 1 && @dvig=0

зачем двойная &
else if

это к чему?

FETCH в начале не соответсвует FETCH'у в конце курсора
25 сен 12, 19:19    [13221204]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
всем спасибо работает но проблема в вычете дат SET @Result = DATEDIFF(MI,@Stop,@Start)...не получается получить разницу...закомментирую работает
ошибки
Msg 8115, Level 16, State 2, Line 27
Arithmetic overflow error converting expression to data type smalldatetime.
Msg 8115, Level 16, State 2, Line 27
Arithmetic overflow error converting expression to data type smalldatetime.
Msg 8115, Level 16, State 2, Line 27
Arithmetic overflow error converting expression to data type smalldatetime.
26 сен 12, 08:02    [13222652]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
помогите исправить цикл по блок схеме?работает не правильно....надо исправить цикл по блок схеме...плз...результат..никуда ни в какие рамки не лезит...время в Юникс по секундам....тип инт....судя по блок схеме цикл работает не правильно
26 сен 12, 09:14    [13222819]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

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


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

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

К сообщению приложен файл. Размер - 16Kb
26 сен 12, 09:17    [13222830]     Ответить | Цитировать Сообщить модератору
 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

Откуда: Москва
Сообщений: 47009
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]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
вы супер программист..мне понравился такой подход....очень понятный....вот еще одна загвостка...хотелось бы еще добавить функцию которая считает общую сумму вот этих часов со значением ON спс большое вам
26 сен 12, 14:42    [13225875]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
iiyama
Member

Откуда:
Сообщений: 642
1) за отображение даты отвечает ваш клиент, если не нравится как он отображет, то настройте как вам нужно или используйте функцию convert
2) для суммирования в sql предусмотрен SUM

PS/ Не могу поверить, что на 4 страницах ранее вам не дали ссылку на документацию, навсякий случай
BOL - Convert
26 сен 12, 14:51    [13225979]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
вот такие у нас люди они меня то стебли то в раздел работа отправляли..спасибо вам добрый человек...а функцию суммирования написать реально?чтоб суммировала результаты по ON
26 сен 12, 14:59    [13226082]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
1й1
Guest
ilik_121188, вот

BOL - SUM
26 сен 12, 15:02    [13226118]     Ответить | Цитировать Сообщить модератору
 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],
	SUM(DATEDIFF(mi,T1.D, T2.D)) as [SumTime]
	--,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. Я не читал что было на 4 страницах, но по всей видимости вас правильно направили. До сих пор не могу определить ваши посты троллинг или нет.
26 сен 12, 15:07    [13226178]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
iiyama
1) за отображение даты отвечает ваш клиент, если не нравится как он отображет, то настройте как вам нужно или используйте функцию convert
2) для суммирования в sql предусмотрен SUM

PS/ Не могу поверить, что на 4 страницах ранее вам не дали ссылку на документацию, навсякий случай
BOL - Convert


спс большое а можно ваши данные?чтоб с вами связаться ася скайп или?просто если будут вопросы буду спрашивать...благодарность обещаю если научите...натаскаете...
26 сен 12, 15:13    [13226250]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
smallserg
Member

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

Два чтения :
DECLARE @T TABLE(ID INT, D DATETIME, [State] INT);
INSERT @T(ID,D,[State])
 select          0,'20120629 12:30',0
union all select 1,'20120629 12:30',1
union all select 2,'20120629 13:30',0
union all select 3,'20120629 14:30',0
union all select 4,'20120629 15:30',1
union all select 5,'20120629 16:30',1
union all select 6,'20120629 17:30',1
union all select 7,'20120629 18:30',0
union all select 8,'20120629 19:30',0

select top 1 with ties d,dateadd(mi,sum(vv) over (partition by m),d) d2,sum(vv) over (partition by m)
 from  
   (select t.id,t.d,t2.d d2,case when t.state=0 then 0 else datediff(mi,t.d,t2.d) end vv,
    t.state st, row_number() over (order by t.id)-row_number() over (partition by t.[state] order by t.d) m
    from @t t left join @t t2 on t.id=t2.id-1 ) w
        where w.st=1
order by row_number() over (partition by m order by id)
27 сен 12, 16:20    [13233646]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
это все хорошо
но есть еще одна проблема
а что если добавить ф-цию заправка топлива
т.е зависимость топлива от времени
как в предыдущей теме..но там так и не реализовали
все определили время работы есть
а что если я хочу подсчитать сколько залито топлива было и в какой период времени
при учете движения авто неровностей поверхности и т.д.(не берем глобальные переворот авто наклон в гору и т.п)а просто отличить заправку от неровной поверхности
код такой но не учитывает неровную поверхность и заправку
алгоритм таков
1)определить зависимость топлива от времени
2)1 и 2 производная для ф-ции под номером 1
3)находим разность м-у соседними экстремумами-это и будет кол-во заправленного-потраченого топлива
declare @t table ( id int, time datetime, val int )
insert into @t
values  ( 1, '20120921 00:00', 20 )
	  , ( 2, '20120921 01:00', 15 )
      , ( 3, '20120921 02:00', 30 )
      , ( 4, '20120921 03:00', 40 )
      , ( 5, '20120921 04:00', 60 )

select t1.*, t2.val - t1.val as diff_val 
  from @t t1
    left join @t t2
      on t1.id = t2.id - 1
28 сен 12, 07:54    [13236350]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Glory
Member

Откуда:
Сообщений: 104760
ilik_121188
а что если добавить ф-цию заправка топлива
т.е зависимость топлива от времени
как в предыдущей теме..но там так и не реализовали

Интересно девки пляшут
https://www.sql.ru/forum/actualthread.aspx?tid=972163 - это тоже вы ?
28 сен 12, 09:18    [13236510]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
это мой напарник с одной конторы....
28 сен 12, 09:22    [13236524]     Ответить | Цитировать Сообщить модератору
 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 


интересно было бы дорешить мой вариант...есть идеи?хочу добить свой курсор..
1 окт 12, 09:56    [13247599]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
актуально
1 окт 12, 10:29    [13247796]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
+
1 окт 12, 10:53    [13247977]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
ilik_121188

спс большое а можно ваши данные?чтоб с вами связаться ася скайп или?просто если будут вопросы буду спрашивать...благодарность обещаю если научите...натаскаете...



Гыы. Заведи себе ручного троля.
1 окт 12, 17:58    [13251678]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Тему предлагаю не то что закрыть.
Удалить нафиг.
1 окт 12, 18:19    [13251834]     Ответить | Цитировать Сообщить модератору
 Re: курсор помогите  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Упс, кажись не в ту ветку.
1 окт 12, 18:25    [13251867]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
Все форумы / Microsoft SQL Server Ответить