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

Откуда: glubinka
Сообщений: 4256
вернуть запрос с колонкой где 0 стоял бы там если текуший рекордсет не отличался от предидушего и единица если разные. И штобы работало на синтаксисе от 2008? И что бы без курсора?

не могу придумать ничего лучше чем это.

declare @device_counter table (dev_counter_id int not null primary key, dev_id int not null, dev_counter_date DATETIME2 not null, val1 int, val2 int);

insert into @device_counter
SELECT dev_counter_id, dev_id, CAST(dev_counter_date AS DATE) as dev_counter_date, val1, val2 
FROM (VALUES (-1, 5, NULL, 3, '20141230'), (0, 5, NULL, 6, '20141231'), (1, 5, NULL, NULL, '20150101'), (2, 5, 11, 2, '20150102'), (3, 5, NULL, 8, '20150103'), (4, 5, 22, NULL, '20150104')
    , (5, 5, 33, NULL,'20150105'), (6, 5, NULL, 2,'20150106'), (7, 5, NULL, 1,'20150107'), (8, 5, NULL, 0,'20150108'), (9, 5, 50, 4,'20150109'), (10, 5, 52, 1, '20150110')
    , (11, 5, NULL, 3, '20150111') ) T(dev_counter_id, dev_id, val1, val2, dev_counter_date)

select *, CASE WHEN (ROW_NUMBER() OVER(PARTITION BY datahash ORDER BY datahash)) > 1 THEN 1 ELSE 0 END   from 
( select *, (SELECT hashbytes('md5', ( SELECT val1, val2  FOR XML raw ))) as datahash from @device_counter )a
8 янв 16, 19:28    [18653314]     Ответить | Цитировать Сообщить модератору
 Re: сравнить рекорсеты  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
declare
  @t1 table (a int, b int);
declare
  @t2 table (a int, b int);
insert into @t1 values (1,2),(3,4);
insert into @t2 values (1,2),(3,4);
select sign(count(1)) from ((select a,b from @t1 except select a,b from @t2) union all (select a,b from @t2 except select a, b from @t1)) v

declare
  @t1 table (a int, b int);
declare
  @t2 table (a int, b int);
insert into @t1 values (1,2),(3,4);
insert into @t2 values (1,2),(3,4),(5,6);
select sign(count(1)) from ((select a,b from @t1 except select a,b from @t2) union all (select a,b from @t2 except select a, b from @t1)) v
8 янв 16, 20:05    [18653433]     Ответить | Цитировать Сообщить модератору
 Re: сравнить рекорсеты  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
я конечно извиняюсь, но вы пробовали выполнить мое репо? Я вроде бы сказал про колонку к сушествуюшему запросу
8 янв 16, 20:13    [18653466]     Ответить | Цитировать Сообщить модератору
 Re: сравнить рекорсеты  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Lepsik
я конечно извиняюсь, но вы пробовали выполнить мое репо? Я вроде бы сказал про колонку к сушествуюшему запросу
А что в вашем примере "текущее" и "предыдущее"? И на основании чего?
Коллизий хеша не боитесь?
8 янв 16, 20:42    [18653574]     Ответить | Цитировать Сообщить модератору
 Re: сравнить рекорсеты  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
--А что в вашем примере "текущее" и "предыдущее"? И на основании чего?

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

Я для того и спрашиваю. в принципе там все поля int, можно сделать XOR между полями, в качeстве NULL использовать ~0.

Просто может есть что-то по-проше чем я спросил
8 янв 16, 21:22    [18653667]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить