Как случайным образом выбрать строку в одной таблице в соответствии с каждой строкой в ​​другой таблице? - PullRequest
0 голосов
/ 07 мая 2018

есть 2 таблицы:

crash и traffic_flow.

Таблица

crash имеет атрибуты crash_date, time и соответствующий детектор ID.

traffic_flow Таблица, записанная детекторами, имеет атрибуты date, time, detector_ID, автоматически увеличивающийся идентификатор и параметры трафика.

Теперь я хочу случайным образом выбрать 10 строк в traffic_flow для каждой строки в сбое, соответственно, и вставить их в новую таблицу.

Следующее является пробным:

select traffic_flow.id
from traffic_flow,crash
where traffic_flow.date=crash.date and traffic_flow.ID=crash.ID
order by rand()
limit 10;

но этот оператор sql выбирает всего 10 строк для всех записей сбоя, а не для каждой строки сбоя, поэтому он не может удовлетворить мое требование. не могли бы вы изменить заявление для меня?

1 Ответ

0 голосов
/ 07 мая 2018

В MySQL самый простой метод - использовать переменные для перечисления строк для каждого сбоя:

select *
from (select ct.*,
             (@rn := if(@ct = id, @rn + 1,
                        if(@ct := id, 1, 1)
                       )
             ) as rn
      from (select c.*, tf.id as tf_id
            from traffic_flow tf join
                 crash c
                 on tf.date = c.date and tf.ID = c.ID
            order by c.id, rand()
           ) ct cross join
           (select @cid := -1, @rn := 0) params
     )
where rn <= 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...