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

Откуда:
Сообщений: 89
данный курсор выводит id.а надо время(time)находящееся под этим id

пример вывода сейчас 45 2 5

исправить и получить следущий результат

Пример: вывод должен быть таков 45 20120921 01:00 20120921 04:0

т.е. вместо id подставить время находящееся под этим id

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 )
      , ( 6, '20120921 02:00', 30 )
      , ( 7, '20120921 03:00', 40 )
      , ( 8, '20120921 04:00', 60 )
     
    DECLARE     @id         int
    DECLARE     @time       datetime
    DECLARE     @val        int
    declare     @diff_vall  int
    declare     @start  int
    declare     @pointstart int
    declare     @pointend   int
    declare     @k  int
    declare     @vrema   int
 
 
    DECLARE     cursor_checkArea        CURSOR FOR       
        select t1.*, t2.val - t1.val as diff_val 
            from @t t1
        left join @t t2
      on t1.id = t2.id - 1                                                                             
                                                                                                            
    OPEN cursor_checkArea                                                         
    FETCH NEXT FROM cursor_checkArea                                                                           
    INTO        @id,
                @time,
                @val,
                @diff_vall
    SET     @start  =   0                                                                                
                                                                                                            
    WHILE( @@FETCH_STATUS = 0 )                                                                             
    BEGIN 
        
        
        IF  (@diff_vall>0 )
            begin 
                if(@start=0)set @pointstart=@id
                set @start=@start+@diff_vall 
                set @k=@k+1
            end
        else
            begin
                if (@k>3 OR @start>20)
                    begin
                        set @pointend = @id
                       
                        select @start as [Zalito],
							   [nach] =@pointstart ,
							   [konec]=@pointend
							  
                        
                    end
                set @start=0
                set @k=0    
            end
                     
        FETCH NEXT FROM cursor_checkArea
        INTO    @id,
                @time,
                @val,
                @diff_vall
    END
 
    CLOSE cursor_checkArea
    DEALLOCATE cursor_checkArea
    
   
30 сен 12, 17:51    [13245703]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

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


К сообщению приложен файл. Размер - 10Kb
30 сен 12, 17:52    [13245708]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
aleks2
Guest
Реинкарнация
https://www.sql.ru/forum/actualthread.aspx?tid=972163
?

Изучи JOIN штоле.
30 сен 12, 18:06    [13245757]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
aleks2
Реинкарнация
https://www.sql.ru/forum/actualthread.aspx?tid=972163
?

Изучи JOIN штоле.


ок поюзаю....есть еще решения?кто что скажет?
30 сен 12, 18:11    [13245780]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
а что если join не использовать?
30 сен 12, 18:27    [13245846]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
актуально
30 сен 12, 19:35    [13246094]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
А чем JOIN не угодил?
30 сен 12, 20:25    [13246230]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
делаю join-ом отбираются даты которые наоборот не в списке..спс заранее....
30 сен 12, 20:39    [13246282]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

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


или же отбираютя но не по id,,,пысы...чайник Я
30 сен 12, 20:44    [13246300]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
Читатель неместный
Guest
Все вопросы к Glory.
Он может ответить но не хочет...вообще удивляюсь его спокойствию... мне бы так научиться
30 сен 12, 20:50    [13246324]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
уважаемый Glory помогите пожалуйста, извиняюсь если веду себя не правильно стараюсь меняться...помогите с решением данной проблемы спасибо большое..с уважением Илья!
30 сен 12, 20:56    [13246351]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
ilik_121188
делаю join-ом отбираются даты которые наоборот не в списке..спс заранее....

ilik_121188
или же отбираютя но не по id
Так напишите, как вы делаете джойн, что бы отбирать даты.

Честно говоря, вообще непонятна задача и проблема.
30 сен 12, 20:59    [13246371]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
alexeyvg
ilik_121188
делаю join-ом отбираются даты которые наоборот не в списке..спс заранее....

ilik_121188
или же отбираютя но не по id
Так напишите, как вы делаете джойн, что бы отбирать даты.

Честно говоря, вообще непонятна задача и проблема.


чего непонятно?выводит id а надо даты соответствующие id-шкам

вывод сейчас 45 2 5

а надо 45 20120921 01:00 20120921 04:0

а написать стыдно так как бред мне кажется я делаю
30 сен 12, 21:08    [13246420]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
+ интересно ваше решение
30 сен 12, 21:45    [13246561]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
вроде задача не супер пупер сложности.....
30 сен 12, 21:52    [13246574]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
ilik_121188
а написать стыдно так как бред мне кажется я делаю
Обучатся не может быть стыдно априори.
Покажите свой вариант.
30 сен 12, 22:30    [13246659]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
select @pointstart, @pointend as date
from @t t1
left join @t t2
on t1.id = t2.id - 1

вот как то так
1 окт 12, 07:23    [13247243]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

Откуда:
Сообщений: 89
ilik_121188
select @pointstart, @pointend as date
from @t t1
left join @t t2
on t1.id = t2.id - 1

вот как то так

не судите строго
1 окт 12, 07:25    [13247246]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
ilik_121188
select @pointstart, @pointend as date
from @t t1
left join @t t2
on t1.id = t2.id - 1

вот как то так
В этои запросе вы выводите значения переменных @pointstart и @pointend

А вам нужно выводить значения полей таблиц
1 окт 12, 08:28    [13247330]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
ilik_121188
Member

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

а что если так

 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 )
      , ( 6, '20120921 05:00', 30 )
      , ( 7, '20120921 06:00', 40 )
      , ( 8, '20120921 07:00', 50 )
      , ( 9, '20120921 08:00', 60 )
      , ( 10, '20120921 09:00',70 )
      , ( 11, '20120921 10:00', 80 )
      , ( 12, '20120921 11:00', 90 )
      , ( 13, '20120921 12:00', 100 )
      
    
    
    
    declare     @id         int
    declare     @time       datetime
    declare     @val        int
    declare     @diff_vall  int
    declare     @start  int
    declare     @pointstart datetime
    declare     @pointend   datetime
    declare     @k  int
    declare     @vrema   int
 
 
    DECLARE     cursor_checkArea        CURSOR FOR       
        select t1.*, t2.val - t1.val as diff_val 
            from @t t1
        left join @t t2
      on t1.id = t2.id - 1                                                                             
                                                                                                            
    OPEN cursor_checkArea                                                         
    FETCH NEXT FROM cursor_checkArea                                                                           
    INTO     @id,
                @time,
                @val,
                @diff_vall
    SET     @start  =   0                                                                                
                                                                                                            
    WHILE( @@FETCH_STATUS = 0 )                                                                             
    BEGIN 
        
        
        IF  (@diff_vall>0 )
            begin 
                if(@start=0)set @pointstart=@time
                set @start=@start+@diff_vall 
                set @k=@k+1
            end
        else
            begin
                if (@k>3 OR @start>20)
                    begin
                        set @pointend = @time
                       
                        select [Nachalo] =@pointstart ,
							   [Konec]=@pointend,
							   [Zalito_litrov]=@start
                        
                    end
                set @start=0
                set @k=0    
            end
                     
        FETCH NEXT FROM cursor_checkArea
        INTO  @id,
                @time,
                @val,
                @diff_vall
    END
 
    CLOSE cursor_checkArea
    DEALLOCATE cursor_checkArea
1 окт 12, 08:37    [13247341]     Ответить | Цитировать Сообщить модератору
 Re: вывод даты по id  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Пункт 4
1 окт 12, 12:52    [13248945]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить