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

Откуда: Russia, Ryazan
Сообщений: 124
Есть таблица
TDate | Signal_ID | Signal_Value
-------------------------------------------
10/10/2004 9:05 | 241 | 1
10/10/2004 9:10 | 241 | 1
10/10/2004 9:15 | 241 | 1
10/10/2004 9:20 | 241 | 2
10/10/2004 9:25 | 241 | 2
10/10/2004 9:30 | 241 | 1
10/10/2004 9:35 | 241 | 0
10/10/2004 9:40 | 241 | 0
10/10/2004 9:45 | 241 | 1

В результате нужно получить записи, когда произошло изменение значения сигнала, т.е. следующее:
TDate | Signal_ID | Signal_Value
-------------------------------------------
10/10/2004 9:05 | 241 | 1
10/10/2004 9:20 | 241 | 2
10/10/2004 9:30 | 241 | 1
10/10/2004 9:35 | 241 | 0
10/10/2004 9:45 | 241 | 1

Можно ли решить эту задачку без курсоров, если да, поделитесь, пожалуйста, соображениями. Спасибо за внимание.
2 ноя 04, 14:30    [1077981]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
unicode
Member

Откуда:
Сообщений: 810
у меня была таже проблема .. здесь насколько я знаю и насколько долго я сидел на этих граблях без перебора записей и их логической обработки не обойтись

такая система есть у APACS-для контроля входов и выходов так вот, джае они используют перебор записей так как мешают постоянно даты и время..

а перебор я сделал примерно вот так.

1) запоминаешь номер карты и тип сигнала
2) переходишь на другую запись и проверяешь на ту же карту и на сигнал отличный от первого в итоге получаеться (1,2) а номер карты один и тотже но это все лишь одно условие по которому их нужно выдернуть в общей сложности там около 6 обработок .. сейчас посмотрю как у меня там и напишу..
2 ноя 04, 14:34    [1077992]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
unicode
Member

Откуда:
Сообщений: 810
обработка происходит вот так

1) первая запись - запоминаешь в переменные номер карты,и тип сигнала
(cardnum1,signal1)
переходишь на вторую запись
2) первая запись - запоминаешь в переменные номер карты,и тип сигнала
(cardnum2,signal2)

после этого делаешь проверку между переменными

1)-ая проверка где cardnum1 = cardnum2 and (signal1 = 1) and (signal2=2)

2)-ая проверка где cardnum1=cardnum2 and (signal1=1) and (signal2=1)

3)-я проверка где cardnum1=cardnum2 and (signal1=2) and (signal2=2)

4)-ая проверка где cardnum1<>cardnum2 and (signal1=1) and (signal2=1)

5)-ая проверка где cardnum1<>cardnum2 and (signal1=2) and (signal2=2)

6)-ая проверка где cardnum1<>cardnum2 and (signal1=1) and (signal2=2)

причем если хотя бы одно условие совпадаетто происходит операция вставки записи через переменную в таблицу входов и выходов
в 6-ом случае вставка происходит два раза так как для обеих случаев вход и выход (один из них) не найден
2 ноя 04, 14:43    [1078011]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Спасибо, буду очень благодарна.
2 ноя 04, 14:45    [1078020]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
СПАСИБО
2 ноя 04, 14:46    [1078025]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
unicode
Member

Откуда:
Сообщений: 810
описание таблицы в ADOTable1 (cardnumber,datetime,signal)
(примерные данные)
444,'2004-10-01 15:00:00',1
444,'2004-10-01 20:00:00',2
444,'2004-10-02 15:00:00',1
444,'2004-10-02 20:00:00',2

Описание ADOTable2 (cardnumber,[in],[in_date],[out],out_date)
где (cardnumber(int),[in](smallint),in_date(datetime),[out](smallint),out_date(datetime))


 
var
id,id1,in_,out_,cnb,cna:integer;
in_date,out_date,in_date1,out_date1:string;
begin

ADOTable1.Active:=False;
ADOTable1.Active:=True;
ADOTable1.First;

while not ADOTable1.Eof do begin
 ProgressBar1.Position:=ADOTable1.RecNo;
 cnb:=ADOTable1.Fields[0].AsInteger;
 in_date:=ADOTable1.Fields[1].AsString;
 in_:=ADOTable1.Fields[2].AsInteger;
 ADOTable1.Next;
 out_:=ADOTable1.Fields[2].AsInteger;
 out_date:=ADOTable1.Fields[1].AsString;
 cna:=ADOTable1.Fields[0].AsInteger;
 if (in_ = 1) and (out_ = 2) and (cnb = cna) then begin
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cnb;
 ADOTable2.Fields[2].AsInteger:=in_;
 ADOTable2.Fields[3].AsString:=in_date;
 ADOTable2.Fields[4].AsInteger:=out_;
 ADOTable2.Fields[5].AsString:=out_date;
  ADOTable2.Post;
 //Memo1.Lines.Add(IntToStr(cnb)+' | '+IntToStr(in_)+' - '+IntToStr(out_));
 end else
 if (in_ = 1) and (out_ = 1) and (cnb = cna) then begin
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cnb;
 ADOTable2.Fields[2].AsInteger:=in_;
 ADOTable2.Fields[3].AsString:=in_date;
 ADOTable2.Post;
 //Memo1.Lines.Add(IntToStr(cnb)+' | '+IntToStr(in_)+' - ');
 end else
 if (in_ = 2) and (out_ = 2) and (cnb = cna) then begin
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cnb;
 ADOTable2.Fields[4].AsInteger:=out_;
 ADOTable2.Fields[5].AsString:=out_date;
 ADOTable2.Post;
 //Memo1.Lines.Add(IntToStr(cnb)+' | '+IntToStr(out_)+' - ');
 end else
 if (in_ = 2) and (out_ = 2) and (cnb <> cna) then begin
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cna;
 ADOTable2.Fields[4].AsInteger:=out_;
 ADOTable2.Fields[5].AsString:=out_date;
 ADOTable2.Post;
 end else
 if (in_ = 1) and (out_ = 1) and (cnb <> cna) then begin
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cnb;
 ADOTable2.Fields[2].AsInteger:=in_;
 ADOTable2.Fields[3].AsString:=in_date;
 ADOTable2.Post;
 //Memo1.Lines.Add(IntToStr(cnb)+' | '+IntToStr(in_)+' - ');
 end else
 if (in_ = 1) and (out_ = 2) and (cnb <> cna) then begin
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cnb;
 ADOTable2.Fields[2].AsInteger:=in_;
 ADOTable2.Fields[3].AsString:=in_date;
 ADOTable2.Post;
 ADOTable2.Insert;
 ADOTable2.Fields[1].AsInteger:=cna;
 ADOTable2.Fields[4].AsInteger:=out_;
 ADOTable2.Fields[5].AsString:=out_date;
 ADOTable2.Post;
 //Memo1.Lines.Add(IntToStr(cnb)+' | '+IntToStr(in_)+' - ');
 end else
 end; // of While
ADOTable1.Close;

в принцепе погрешности быть не должно
2 ноя 04, 14:52    [1078041]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
set dateformat dmy
declare @t table (tableTDate datetime, Signal_ID int, Signal_Value int)
insert @t
select '10/10/2004 9:05', 241 , 1
union all select '10/10/2004 9:10',  241 , 1
union all select '10/10/2004 9:15', 241 , 1
union all select '10/10/2004 9:20', 241 , 2
union all select '10/10/2004 9:25', 241 , 2
union all select '10/10/2004 9:30', 241 , 1
union all select '10/10/2004 9:35', 241 , 0
union all select '10/10/2004 9:40', 241 , 0
union all select '10/10/2004 9:45', 241 , 1


select *
from @t a
where isnull((select top 1 signal_value from @t b where b.signal_id = a.signal_id and b.tabletdate < a.tabletdate order by b.tabletdate desc),-99)  <> a.signal_value
2 ноя 04, 14:59    [1078058]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
unicode
Member

Откуда:
Сообщений: 810
да для случая где был сигнал входа а вот например сигнал выхода не был
тогда по моему должно быть вот так

1 NULL
NULl 2
2 ноя 04, 15:09    [1078088]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
еще такие варианты могут быть:

declare @t table( date datetime, s int)

insert @t 
select '20041010 9:05', 1 union
select '20041010 9:10', 1 union
select '20041010 9:15', 1 union
select '20041010 9:20', 2 union
select '20041010 9:25', 2 union
select '20041010 9:30', 1 union
select '20041010 9:35', 0 union
select '20041010 9:40', 0 union
select '20041010 9:45', 1

-- здесь правда первой записи не будет
select * from @t t1 
  where exists (select * from @t t2 where t1.date>t2.date and t1.s<>t2.s 
    and not exists (select * from @t t3 where t3.date>t2.date and t3.date<t1.date and t1.s<>t2.s ))


-- почти как у Glory
select t1.* 
  from @t t1 left join @t t2 on t2.date=(select max(date) from @t t3 where t3.date<t1.date)
  where t1.s<>isnull(t2.s,-1)

Так что APACS нам не авторитет :)
2 ноя 04, 15:17    [1078110]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Всем большое спасибо, особенно Glory.
PS: попробовала с курсором и запрос, предложенный Glory, - с курсором работает быстрее.
3 ноя 04, 14:13    [1080665]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
PS: попробовала с курсором и запрос, предложенный Glory, - с курсором работает быстрее.

... а думала, что должно быть наоборот
3 ноя 04, 14:18    [1080692]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
... а думала, что должно быть наоборот
А что и индексы у нас есть какие-нибудь ?
3 ноя 04, 14:28    [1080728]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Glory
А что и индексы у нас есть какие-нибудь ?

Имеется составной первичный ключ:TDate и Signal_ID, откуда имеем уникальный индекс
3 ноя 04, 15:53    [1081133]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
И он используется в запросе ?
3 ноя 04, 15:58    [1081157]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Да, оба этих столбца используются в условии. В Вашем запросе они названы как signal_id и tabletdate

select *
from @t a
where isnull((select top 1 signal_value from @t b where b.signal_id = a.signal_id and b.tabletdate < a.tabletdate order by b.tabletdate desc),-99)  <> a.signal_value

Если я правильно поняла Ваш вопрос
3 ноя 04, 16:03    [1081187]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Да, оба этих столбца используются в условии
А в плане выполнения запроса видно использование индекса по этим столбцам ?
3 ноя 04, 16:12    [1081224]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
В плане видно Clustered index scan (0%), далее Index spool/Eager spool (85%)
3 ноя 04, 16:36    [1081305]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Index spool/Eager spool
Уууу. Что то у вас не так с индексом. Ибо это как раз оптимизатор строит свой собственный.

Смотрите этот план
set dateformat dmy
declare @t table (tableTDate datetime, Signal_ID int, Signal_Value int, PRIMARY KEY (tableTDate, Signal_ID))
insert @t
select '10/10/2004 9:05', 241 , 1
union all select '10/10/2004 9:10',  241 , 1
union all select '10/10/2004 9:15', 241 , 1
union all select '10/10/2004 9:20', 241 , 2
union all select '10/10/2004 9:25', 241 , 2
union all select '10/10/2004 9:30', 241 , 1
union all select '10/10/2004 9:35', 241 , 0
union all select '10/10/2004 9:40', 241 , 0
union all select '10/10/2004 9:45', 241 , 1


select *
from @t a
where isnull((select top 1 signal_value from @t b where b.signal_id = a.signal_id and b.tabletdate < a.tabletdate order by b.tabletdate desc),-99)  <> a.signal_value
3 ноя 04, 16:46    [1081336]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Glory, привожу для примера оба плана: для запроса, предложенного вами, и для курсора (я из них никаких выводов не сделала, кроме того, что с курсором производительнее):
select a.*
from dbo.Kotel_11 a
where signal_id=500 and isnull((select top 1 signal_value from dbo.Kotel_11 b 
where b.signal_id = a.signal_id and b.datetime_begin < a.datetime_begin 
order by b.datetime_begin desc),-99)
  <> a.signal_value
Execution Time: 0:00:08

Execution plan:
SELECT (Cost: 0%) <- Filter (Cost: 0%) <- Nested Loops/Lest Outer Join (Cost: 0%) <- Clustered Index (Cost: 0%)
и Compute Scalar (Cost: 0%) <- Sort/TopN Sort (Cost: 14%) <- Index Spool/Eager Spool (Cost: 86%) <- Clustered Index (Cost: 0%)

DECLARE cur CURSOR LOCAL STATIC READ_ONLY FOR 
(SELECT DateTime_Begin, Signal_Value FROM dbo.Kotel_11 WHERE Signal_ID = 500) 
DECLARE @DateTime_Begin datetime, @Signal_Value float, 
        @DateTime_Begin_Prev datetime, @Signal_Value_Prev float
DECLARE @res_table TABLE (DateTime_Begin datetime, Signal_Value float) 
OPEN cur 
FETCH FIRST FROM cur INTO @DateTime_Begin, @Signal_Value
SET @DateTime_Begin_Prev = @DateTime_Begin
SET @Signal_Value_Prev = @Signal_Value
INSERT INTO @res_table (DateTime_Begin, Signal_Value)
VALUES (@DateTime_Begin, @Signal_Value) 
WHILE @@FETCH_STATUS = 0 
BEGIN 
  IF @Signal_Value_Prev <> @Signal_Value 
  BEGIN
    INSERT INTO @res_table (DateTime_Begin, Signal_Value)
    VALUES (@DateTime_Begin, @Signal_Value)
    SET @Signal_Value_Prev = @Signal_Value
    SET @DateTime_Begin_Prev = @DateTime_Begin 
  END 
  FETCH FROM cur INTO @DateTime_Begin, @Signal_Value
END
SELECT * FROM @res_table
Execution Time: 0:00:00

Execution plan:
Query 1: Query cost (relative to the batch): 0,00%
OPEN CURSOR (Cost: 0%) <- Clustered Index (Cost: 0%)
------------------------------------------------------------------------
Query 2: Query cost (relative to the batch): 33,33%
INSERT (Cost: 0%) <- Table Insert/Insert (Cost: 100%)
------------------------------------------------------------------------
Query 3: Query cost (relative to the batch): 33,33%
INSERT (Cost: 0%) <- Table Insert/Insert (Cost: 100%)
------------------------------------------------------------------------
Query 4: Query cost (relative to the batch): 33,33%
INSERT (Cost: 0%) <- Table Insert/Insert (Cost: 100%)
------------------------------------------------------------------------
Query 5: Query cost (relative to the batch): 0,00%
SELECT (Cost: 0%) <- Table Scan (Cost: 0%)
4 ноя 04, 09:56    [1082487]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
2 Маринка*
План надо бы тоже включать в тэг
[SRC][/SRC]
4 ноя 04, 10:01    [1082506]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Glory, привожу для примера оба плана: для запроса, предложенного вами, и для курсора (я из них никаких выводов не сделала, кроме того, что с курсором производительнее):
сделайте так

set showplan_text on
go
select a.*
from dbo.Kotel_11 a
where signal_id=500 and isnull((select top 1 signal_value from dbo.Kotel_11 b
where b.signal_id = a.signal_id and b.datetime_begin < a.datetime_begin
order by b.datetime_begin desc),-99)
<> a.signal_value
go
set showplan_text off
go

Index Spool/Eager Spool (Cost: 86%) - это оптимизатор создает временный индекс вместо того чтобы использовать существующий. Разумеется это требует дополнительных затрат что и отражается га времени запроса ибо стоимотсть этой операции составляет 86% от всего запроса
4 ноя 04, 10:05    [1082527]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Спасибо, Glory, толково объяснил. Сейчас попробую.
4 ноя 04, 10:18    [1082578]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Glory, сделала, как вы сказали, вот результат:
1. select a.*  from dbo.Kotel_11 a  where signal_id=500 and isnull((select top 1 signal_value from dbo.Kotel_11 b   where b.signal_id = a.signal_id and b.datetime_begin < a.datetime_begin   order by b.datetime_begin desc),-99)    <> a.signal_value

2. |--Filter(WHERE:(isnull([b].[Signal_Value], -99)<>[a].[Signal_Value]))
       |--Nested Loops(Left Outer Join, OUTER REFERENCES:([a].[DateTime_Begin], [a].[Signal_ID]))
            |--Clustered Index Scan(OBJECT:([TEPs].[dbo].[Kotel_11].[PK_Kotel_11] AS [a]), WHERE:([a].[Signal_ID]=500))
            |--Compute Scalar(DEFINE:([b].[Signal_Value]=[b].[Signal_Value]))
                 |--Sort(TOP 1, ORDER BY:([b].[DateTime_Begin] DESC))
                      |--Index Spool(SEEK:([b].[Signal_ID]=[a].[Signal_ID] AND [b].[DateTime_Begin] < [a].[DateTime_Begin]))
                           |--Clustered Index Scan(OBJECT:([TEPs].[dbo].[Kotel_11].[PK_Kotel_11] AS [b]))

--------------------------------
1.DECLARE cur CURSOR LOCAL STATIC READ_ONLY FOR   (SELECT DateTime_Begin, Signal_Value FROM dbo.Kotel_11 WHERE Signal_ID = 500)

2. |--Snapshot Cursor(cur, Read Only)
       |--Population Query(Synchronous)
            |--Clustered Index Scan(OBJECT:([TEPs].[dbo].[Kotel_11].[PK_Kotel_11]), WHERE:([Kotel_11].[Signal_ID]=500))
3. DECLARE @DateTime_Begin datetime, @Signal_Value float,           @DateTime_Begin_Prev datetime, @Signal_Value_Prev float  DECLARE @res_table TABLE (DateTime_Begin datetime, Signal_Value float)   OPEN cur
 FETCH FIRST FROM cur INTO @DateTime_Begin, @Signal_Value  SET
 @DateTime_Begin_Prev = @DateTime_Begin  SET
 @Signal_Value_Prev = @Signal_Value
 INSERT INTO @res_table (DateTime_Begin, Signal_Value)  VALUES (@DateTime_Begin, @Signal_Value)

4. |--Table Insert(OBJECT:(@res_table), SET:(@res_table.[Signal_Value]=[@Signal_Value], @res_table.[DateTime_Begin]=[@DateTime_Begin]))

5. WHILE @@FETCH_STATUS = 0
   BEGIN     IF @Signal_Value_Prev <> @Signal_Value
          BEGIN      INSERT INTO @res_table (DateTime_Begin, Signal_Value)      VALUES (@DateTime_Begin, @Signal_Value)      SET 

6.	|--Table Insert(OBJECT:(@res_table), SET:(@res_table.[Signal_Value]=[@Signal_Value], @res_table.[DateTime_Begin]=[@DateTime_Begin]))

7. @Signal_Value_Prev = @Signal_Value      SET
     @DateTime_Begin_Prev = @DateTime_Begin
   END     FETCH FROM cur INTO @DateTime_Begin, @Signal_Value
 END  SELECT * FROM @res_table

8.  |--Table Scan(OBJECT:(@res_table))

По-моему все то же, только в профиль (кстати, пронумеровала я для читабельности).
У меня такой вопрос: почему же этот преславутый Index Spool/Eager Spool отсутствует в запросе с курсором?

tpg
План надо бы тоже включать в тэг
[SRC][/SRC]

tpg, спасибо за совет, учту на будущее.
4 ноя 04, 10:52    [1082736]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Glory
Member

Откуда:
Сообщений: 104760
У меня такой вопрос: почему же этот преславутый Index Spool/Eager Spool отсутствует в запросе с курсором?

Так какой у вас все таки индекс имеется ?
Точно ли по TDate + Signal_ID ?
Какие еще индексы есть ?
Как ведет себя запрос

select a.*  
from dbo.Kotel_11 a  
where isnull((select top 1 signal_value from dbo.Kotel_11 b   where b.signal_id = a.signal_id and b.datetime_begin < a.datetime_begin   order by b.datetime_begin desc),-99)    <> a.signal_value
4 ноя 04, 10:58    [1082758]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать те строки, в которых значение поля изменилось?  [new]
Маринка*
Member

Откуда: Russia, Ryazan
Сообщений: 124
Glory
Так какой у вас все таки индекс имеется ?
Точно ли по TDate + Signal_ID ?
Какие еще индексы есть ?


Index name: PK_Kotel_11
Column name |Order
--------------------------
DateTime_Begin | Descending
Signal_ID | Descending
Create as Clustered
Fill factor: 0%
Signal_ID - внешний ключ

(DateTime_Begin здесь то же, что и TDate)

Вопрос "Как ведет себя запрос" не поняла, в каком смысле?
PS: если мой вопрос уже достал, забейте, остановлюсь на курсорах.
4 ноя 04, 11:16    [1082842]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить