如何根据其他表中的每一行随机选择一个表中的行?

时间:2018-05-07 09:56:44

标签: mysql sql

有2个表:

crashtraffic_flow

crash表的属性为crash_datetime和相应的检测器ID

探测器记录的

traffic_flow表包含datetimedetector_ID,自动递增ID和流量参数等属性。

现在,我愿意为崩溃中的每一行随机选择traffic_flow中的10行,并将它们插入新表中。

以下是试用版:

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 :(得分:0)

在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;