Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 -= Запрос с последовательностями =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
есть таблица (table) с полем (field), в котором находятся числа:
field
1
5
8
12
13
20
35
39
40
41
42
50
55
56
58
60

нужно запросом вывести количество случаев, когда не менее 2-х чисел идут по порядку без пропусков. В нашем примере таких случаев 3 ({12, 13}, {39,40,41,42}, {55,56}).

Заранее, благодарю!
12 янв 10, 11:43    [8169971]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
msLex
Member

Откуда:
Сообщений: 7894
xm?!_(mo3roBa9_akTuBHocTb)


чем задается "порядок"?


или вы потролить вышли
12 янв 10, 11:45    [8169988]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Например, так:
declare @tbl table(field int)
insert @tbl select 1
union all select 5
union all select 8
union all select 12
union all select 13
union all select 20
union all select 35
union all select 39
union all select 40
union all select 41
union all select 42
union all select 50
union all select 55
union all select 56
union all select 58
union all select 60

select count(*) 
from @tbl t
where exists(select * from @tbl t2 where t2.field=t.field+1)
and not exists(select * from @tbl t3 where t3.field=t.field-1)
12 янв 10, 11:57    [8170071]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
USE tempdb;
SET NOCOUNT ON;
IF OBJECT_ID(N'T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE T(F INT);
INSERT T(F)VALUES
 (1)
,(5)
,(8)
,(12)
,(13)
,(20)
,(35)
,(39)
,(40)
,(41)
,(42)
,(50)
,(55)
,(56)
,(58)
,(60);

WITH Seq(G) AS(SELECT ROW_NUMBER()OVER(ORDER BY F)-F FROM T)
SELECT TOP(1) COUNT(*)OVER() [CountOfSequences]
FROM Seq
GROUP BY G
HAVING COUNT(*)>1;
12 янв 10, 11:58    [8170082]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
а возможно без exists и неиспользуя такие конструкции (WITH Seq(G) AS(SELECT ROW_NUMBER()OVER(ORDER BY F)-F FROM T)). Т.е. именно в стандарте SQL-92 (хоть там вроде и содержится оператор exists)
12 янв 10, 12:22    [8170218]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Вы уж сначала определитесь, в каком стандарте и какие еще ограничения.
А то может еще и оператор select нельзя использовать...
12 янв 10, 12:30    [8170267]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SELECT COUNT(*) [CountOfSequences]
FROM (SELECT G FROM (SELECT T.F-(SELECT COUNT(*) FROM T AS TT WHERE TT.F<=T.F) FROM T) AS T(G) GROUP BY G HAVING COUNT(*)>1) AS T;
12 янв 10, 12:33    [8170289]     Ответить | Цитировать Сообщить модератору
 Re: -= Запрос с последовательностями =-  [new]
xm?!_(mo3roBa9_akTuBHocTb)
Member

Откуда:
Сообщений: 267
iap,DeColo®es

спасибо за помощь!
12 янв 10, 12:49    [8170411]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить