Страница 1 из 1

Выборка записей случайным образом

Добавлено: 29 дек 2016, 09:57
romir
Подскажите, пожалуйста, как выбрать случайным образом 100 записей (точечных объектов) из таблицы?

Re: Выборка записей случайным образом

Добавлено: 29 дек 2016, 10:58
Игорь Белов
Один из способов:
  1. в окне MapBasic ввести команду Randomize
  2. изменить структуру таблицы: добавить колонку Rand типа Float
  3. заполнить колонку Rand значениями rnd(1)
  4. сделать выборку с сортировкой по полю Rand
  5. сохранить копию выборки в новую таблицу
  6. открыть новую таблицу
  7. сделать выборку из новой таблицы по условию RowID <= 100

Re: Выборка записей случайным образом

Добавлено: 29 дек 2016, 12:01
romir
А через запрос как-нибудь можно?

Re: Выборка записей случайным образом

Добавлено: 29 дек 2016, 15:00
romir
Спасибо. Все работает и желаемое достигается :)

Re: Выборка записей случайным образом

Добавлено: 29 дек 2016, 20:38
Boris
romir писал(а):А через запрос как-нибудь можно?
можно, но только через ДВА:

Код: Выделить всё

Select CAD_NUM,rnd(1)*1000 from KU_5033 order by 2 into Q001
Browse * From Q001
Select * from Q001 where rowid<=100 into Q002
Browse * From Q002
или, если данных много и можно предположить, что функция Rnd(1) даст равномерное распределение, то одним запросом можно получить приблизительно 100 записей:

Код: Выделить всё

Select CAD_NUM from KU_5033 where rnd(1)<(100/int(TableInfo("KU_5033",8))) into Q001
Browse * From Q001
На 85000 записей выборка дала от 99 до 103 записей.

Re: Выборка записей случайным образом

Добавлено: 30 дек 2016, 09:14
romir
Спасибо!