有2个表:
crash
和traffic_flow
。
crash
表的属性为crash_date
,time
和相应的检测器ID
。
traffic_flow
表包含date
,time
,detector_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行,而不是崩溃中的每一行,所以它不能满足我的要求。你可以为我修改声明吗?
答案 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;