Составление запроса

Lexid
Дата: 12.10.2005 00:20:31
Здравствуйте!
Есть таблица вида

|   Number     |     Date        |
+--------------+-----------------+
| 45680201 | 01.03.2005 |
| 45680202 | 07.02.2005 |
| 45680203 | 12.11.2005 |
| 45680210 | 19.08.2005 |
| 45680215 | 23.04.2005 |
| 45680216 | 14.09.2005 |
| 45680217 | 21.02.2005 |
| 45680220 | 30.01.2005 |
| 45680221 | 17.12.2005 |
| 45680222 | 28.05.2005 |
| 45680224 | 23.07.2005 |
| 45680257 | 07.09.2005 |
| 45680258 | 03.06.2005 |

Можно ли как нибудь вывести её в таком виде?


|   Number1    |     Number2     |
+--------------+-----------------+
| 45680201 | 45680203 |
| 45680210 | 45680210 |
| 45680215 | 45680217 |
| 45680220 | 45680222 |
| 45680224 | 45680224 |
| 45680257 | 45680258 |

srf2000
Дата: 12.10.2005 06:33:36
Lexid
Здравствуйте!
Есть таблица вида

|   Number     |     Date        |
+--------------+-----------------+
| 45680201 | 01.03.2005 |
| 45680202 | 07.02.2005 |
| 45680203 | 12.11.2005 |
| 45680210 | 19.08.2005 |
| 45680215 | 23.04.2005 |
| 45680216 | 14.09.2005 |
| 45680217 | 21.02.2005 |
| 45680220 | 30.01.2005 |
| 45680221 | 17.12.2005 |
| 45680222 | 28.05.2005 |
| 45680224 | 23.07.2005 |
| 45680257 | 07.09.2005 |
| 45680258 | 03.06.2005 |

Можно ли как нибудь вывести её в таком виде?


|   Number1    |     Number2     |
+--------------+-----------------+
| 45680201 | 45680203 |
| 45680210 | 45680210 |
| 45680215 | 45680217 |
| 45680220 | 45680222 |
| 45680224 | 45680224 |
| 45680257 | 45680258 |



это много раз обсуждалось на sql.ru ...
в поиск по теме "поиск непрерывных диапазонов"
Lexid
Дата: 12.10.2005 10:06:50
Большое спасибо. Нашел несколько тем. Буду обрабатывать
Lexid
Дата: 12.10.2005 15:30:54
Вот нашел кое что. Даже работает так как нужно.

create table t (c int)
insert t(с) values(1)
insert t(с) values(2)
insert t(с) values(3)
insert t(с) values(5)
insert t(с) values(6)
insert t(с) values(7)
insert t(с) values(9)

select
  t1.c, min(t2.c)
  from t t1 join t t2 on t1.c <= t2.c
where
  not exists (select * from t t3 where t1.c - 1 = t3.c)
  and
  not exists (select * from t t4 where t2.c + 1 = t4.c)
group by t1.c
результат:
c
----------- -----------
1 3
5 7
9 9

Насколько быстро будет исполняться этот запрос на больших данных ?(>100000 rec)
И как измерить производительность?
problemsolver
Дата: 12.10.2005 17:00:12
Lexid

Насколько быстро будет исполняться этот запрос на больших данных ?(>100000 rec)
И как измерить производительность?


IBExpert->Tools ->Test Data Generator
Lexid
Дата: 13.10.2005 23:18:52
Спасибо.
Но возникла такая проблема.
В таблице кроме Number, Date есть еще поле User у которого значение одинакого для всех подряд идущих номеров. никак не смог всунуть в этот запрос это поле

пишу вот так
select
  t1.NOMER, min(t2.NOMER),BLANC.BSO
  from BLANC t1 join BLANC t2 on t1.NOMER <= t2.NOMER
where
  not exists (select NOMER,BLANC.BSO from BLANC t3 where t1.NOMER - 1 = t3.NOMER)
  and
  not exists (select NOMER,BLANC.BSO from BLANC t4 where t2.NOMER + 1 = t4.NOMER)
group by t1.NOMER
Но ругаеться
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

а вот так работает, но мне поле user нужно чтоб еще выводило

select
  t1.NOMER, min(t2.NOMER)
  from BLANC t1 join BLANC t2 on t1.NOMER <= t2.NOMER
where
  not exists (select NOMER,BLANC.BSO from BLANC t3 where t1.NOMER - 1 = t3.NOMER)
  and
  not exists (select NOMER,BLANC.BSO from BLANC t4 where t2.NOMER + 1 = t4.NOMER)
group by t1.NOMER


что только не пытался но не получилось.
Помогите пожалуйста.
srf2000
Дата: 14.10.2005 06:23:24
Lexid
Спасибо.
Но возникла такая проблема.
В таблице кроме Number, Date есть еще поле User у которого значение одинакого для всех подряд идущих номеров. никак не смог всунуть в этот запрос это поле

пишу вот так
select
  t1.NOMER, min(t2.NOMER),BLANC.BSO
  from BLANC t1 join BLANC t2 on t1.NOMER <= t2.NOMER
where
  not exists (select NOMER,BLANC.BSO from BLANC t3 where t1.NOMER - 1 = t3.NOMER)
  and
  not exists (select NOMER,BLANC.BSO from BLANC t4 where t2.NOMER + 1 = t4.NOMER)
group by t1.NOMER
Но ругаеться
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).


а поле blanc.bso в group by кто добавлять будет?
Lexid
Дата: 14.10.2005 10:49:41
Если запрашивать без поля user то получаеться вот так

NOMER MIN
4 020 114 051 4 020 114 080
4 202 740 307 4 202 740 308
4 202 740 314 4 202 740 315
4 202 740 430 4 202 740 430
4 202 740 441 4 202 740 463
4 510 213 731 4 510 213 800

А если добавить в GROUP BY, BLANC.BSO то выдает вообще чушь


NOMER MIN BSO
4 020 114 051 4 510 213 800 EBT 451
4 020 114 051 4 020 114 080 MCO 402
4 020 114 051 4 202 740 308 TCT 420
4 202 740 307 4 510 213 800 EBT 451
4 202 740 307 4 202 740 308 TCT 420
4 202 740 314 4 510 213 800 EBT 451
4 202 740 314 4 202 740 315 TCT 420
4 202 740 430 4 510 213 800 EBT 451
4 202 740 430 4 202 740 430 TCT 420
4 202 740 441 4 510 213 800 EBT 451
4 202 740 441 4 202 740 463 TCT 420
4 510 213 731 4 510 213 800 EBT 451

Как решать?
Lexid
Дата: 14.10.2005 10:55:49
а должно быть так

NOMER MIN BSO
4 020 114 051 4 020 114 080 MCO 402
4 202 740 307 4 202 740 308 TCT 420
4 202 740 314 4 202 740 315 TCT 420
4 202 740 430 4 202 740 430 TCT 420
4 202 740 441 4 202 740 463 TCT 420
4 510 213 731 4 510 213 800 EBT 451
Lexid
Дата: 14.10.2005 20:57:30
Неужели никак?