Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / задачка -- как выбрать несуществующую информацию ... / 5 сообщений из 5, страница 1 из 1
22.12.2005, 15:12:06
    #33452296
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка -- как выбрать несуществующую информацию ...
предположим для упрощения что есть таблица с числами пусть они будут целые и их диапазон может быть любым и разумеется не сквозным например
num
1
4
2
10
14

задача в том чтобы определить какие именно числа отстуствуют в этой таблице в отрезке от min(num) по max(num) очевидно что это 3,5,6,7,8,9,11,12,13

все бы ничего но по условию задачи нельзя использовать хранимки, все должно быть сделано одним селектом с подзапросами на уровне 4.1
запрещено использовать какие либо вспомогательные таблицы существующие до выполнения этого запроса.
задачка только для прокачки, но сама интересна, сижу второе утро, думаю.
...
Рейтинг: 0 / 0
22.12.2005, 15:21:35
    #33452349
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка -- как выбрать несуществующую информацию ...
На практике подобное нужно было с датами.
Решил просто - генерацией шкалы дат в отдельной таблице :)
...
Рейтинг: 0 / 0
22.12.2005, 15:28:32
    #33452387
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка -- как выбрать несуществующую информацию ...
>>>Решил просто - генерацией шкалы дат в отдельной таблице :)
на практике то да но все таки не то если например нет ограничений по длине отрезка ну для дат там еще хоть куда ни шло то для чисел даже целых придется делать таблицу из минимум 4 миллиардов строк. или же перед запуском запроса делать еще один запрос в цикле что-ли, все таки нужна хп, определяющая минимум и максимум и генерящая таблицу именно под этот отрезок, маразм.
не а не проходит по условиям, продолжаем думать

хотя задача если вдуматься довольно реальная.
...
Рейтинг: 0 / 0
22.12.2005, 15:32:26
    #33452407
Валентин К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка -- как выбрать несуществующую информацию ...
Не совсем математически она лейгая, она кажется легкой.
Сервер манипулирует дискретными величинами, а не отсутствием величин...

Применительно для цифр можно попробовать провернуть через временную таблицу:
сначала загрузить по четным и нечетным значеним в 2 поля
А потом просто вернуть разницу между ними либо относительно какого-либо элемента, вобщем потом уже закалькулировать результат в явно существующих интервалах...
...
Рейтинг: 0 / 0
23.12.2005, 04:10:19
    #33453385
max(id)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка -- как выбрать несуществующую информацию ...
Может так подойдет :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select v.tmp_num
from 
  ( select @a := ifnull(@a, 0 )+  1  
    from t1 a, t1 b, t1 c /* надеюсь хватит ;-)) */
  ) v
where v.tmp_num < (select max(num) from t1)
  and tmp_num not in (select num from t1)
Или так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select v.tmp_num
from 
  ( select @a := (select min(num) from t1) tmp_num
    union
    select @a := @a+  1  
    from t1 a, t1 b, t1 c /* надеюсь хватит ;-)) */
  ) v
where v.tmp_num < (select max(num) from t1)
  and v.tmp_num > (select min(num) from t1)
  and tmp_num not in (select num from t1)
К сожалению под рукой нет 4.1 (только 4.0) поэтому запрос не проверен :-((
Но работать должен, хотя про производительность и оптимизацию говорить не приходится...

P.S. Сам я не "местный" так, что с MySQL не сильно знаком...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / задачка -- как выбрать несуществующую информацию ... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]