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

Откуда: Armenia
Сообщений: 573
Есть ряд натуральных чисел (етественно с дырками!!!).
Как одним селектом найти все дырки этого ряда в диапазоне [1, max(id)]???
13 июн 05, 18:50    [1617468]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
habibi
Member

Откуда: Донецк
Сообщений: 167
Типа того

select  j1.j_id  from journal j1
left join journal j2 on j1.j_id = j2.J_id-1
where j2.j_id is null


Донбасс - порожняк не гонит...
13 июн 05, 18:56    [1617478]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
Нет, непойдет. Примерно так можно найти дырки, рядом с сушествуящими.
13 июн 05, 19:07    [1617494]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
habibi
Member

Откуда: Донецк
Сообщений: 167
Так а что не пойдёт ???
Ясней изложи...

Донбасс - порожняк не гонит...
13 июн 05, 19:16    [1617514]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
CREATE TABLE Tbl ([ID] int)

INSERT Tbl SELECT 3 UNION
SELECT 3 UNION
SELECT 3 UNION
SELECT 3 UNION
13 июн 05, 19:18    [1617516]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
habibi
Member

Откуда: Донецк
Сообщений: 167
Такое не отработает 8))
Донбасс - порожняк не гонит...
13 июн 05, 19:20    [1617517]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
CREATE TABLE Tbl ([ID] int)
GO

INSERT Tbl SELECT 3 UNION
SELECT 4 UNION
SELECT 7 UNION
SELECT 8 UNION
SELECT 10 UNION
SELECT 11

Нужен запрос который вернул бы

ID
1
2
5
6
9
13 июн 05, 19:24    [1617524]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Сделать из полной последовательности [1, max(id)] вычитание данного ряда.
Если известно самое max(d), то написать совсем не сложно.
13 июн 05, 19:34    [1617537]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Hamlet
CREATE TABLE Tbl ([ID] int)
GO

INSERT Tbl SELECT 3 UNION
SELECT 4 UNION
SELECT 7 UNION
SELECT 8 UNION
SELECT 10 UNION
SELECT 11

Нужен запрос который вернул бы

ID
1
2
5
6
9


Вам нужен сперва полный ряд, созданный либо постояной таблицей либо функцией:
if object_id('udf_numbers')> 0 drop function udf_numbers
go
create function udf_numbers (@a int, @b int)
returns @Results table(Value int)
as

begin

declare @n int
set @n = @b-@a

declare @numbers table(val int)
declare @i int
set @i = 0
while @i < 256
begin
    insert @numbers select @i
    set @i = @i + 1
end

declare @numbers1 table(val int)
insert @numbers1 select val*power(2, 8)  FROM @numbers
declare @numbers2 table(val int)
insert @numbers2  select val*power(2, 16) val FROM @numbers

insert into @Results(Value)
select a1.val | a2.val | a3.val + @a
from @numbers a1, @numbers1 a2, @numbers2  a3
where 
	a3.val<=@n 
	and a2.val|a3.val<=@n
	and a1.val|a2.val|a3.val<=@n

return

end
go 

Потом применяйте функцию где это потребеутся:
select t1.Value as ID
from dbo.udf_numbers(1, 10) t1 left join Tbl t2 on
    t1.Value = t2.ID
where t2.ID is null
13 июн 05, 19:34    [1617539]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
habibi
Member

Откуда: Донецк
Сообщений: 167
Ну если разово нада сделать - то так
Лови...

declare @mmmax int
select top 1 @mmmax = id from tbl
order by 1 desc

CREATE TABLE #t
	(
	 iid int NOT NULL IDENTITY (1, 1),
         dermo bit
	)  ON [PRIMARY]

ALTER TABLE #t ADD CONSTRAINT
	PK_Table1 PRIMARY KEY CLUSTERED 
	(
	iid
	) ON [PRIMARY]



while(@mmmax >= 0)
begin
 insert into #t (dermo)
 values (0)
 set @mmmax = @mmmax-1
end
print @mmmax

select iid from #t 
left join Tbl on ID=iid
where id is null
drop table #t

Донбасс - порожняк не гонит...
13 июн 05, 19:34    [1617540]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
habibi
Member

Откуда: Донецк
Сообщений: 167
Ой.. 8)

не (@mmmax >= 0) а (@mmmax > 0)

Донбасс - порожняк не гонит...
13 июн 05, 19:37    [1617544]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
Hamlet
Member

Откуда: Armenia
Сообщений: 573
Гавриленко Сергей Алексеевич
Сделать из полной последовательности [1, max(id)] вычитание данного ряда.
Если известно самое max(d), то написать совсем не сложно.


А если max(id) неизвестен?

Остальные барианты слишком медленны.
13 июн 05, 19:57    [1617562]     Ответить | Цитировать Сообщить модератору
 Re: Ряд натуральных чисел  [new]
AVVS
Member

Откуда:
Сообщений: 335
select max(Id) from ...


А это не поможет? :)
13 июн 05, 20:42    [1617581]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить