MYSQL行数插入到表中

MYSQL行数插入到表中,mysql,numbers,row,Mysql,Numbers,Row,我想找到分组的行号并插入表中进行进一步查询。 这是我提出的代码,但它不起作用。我的意思是插入不起作用,查询本身起作用。请建议解决方法。我试图将此代码放入存储过程中,但这也不起作用。返回的错误是子查询返回的行数超过1行 set @type =''; set @row_number =1; insert into newtable(type,actualdeparturetime,actualarrivaltime,dummy_1,dummy_2,row_number) select type,

我想找到分组的行号并插入表中进行进一步查询。 这是我提出的代码,但它不起作用。我的意思是插入不起作用,查询本身起作用。请建议解决方法。我试图将此代码放入存储过程中,但这也不起作用。返回的错误是子查询返回的行数超过1行

set @type ='';
set @row_number =1;

insert into newtable(type,actualdeparturetime,actualarrivaltime,dummy_1,dummy_2,row_number)
select type, actualdeparturetime,actualarrivaltime,
@row_number:=if(@type=type,@row_number+1,1) as dummy_1,
@type := type as dummy_2,
@row_number as row_number
FROM sourcetable f
where actualarrivaltime<> '0000-00-00 00:00:00' 
AND actualarrivaltime > (now()-INTERVAL 1 MONTH)
order by type ; 
set@type='';
设置@row_number=1;
插入到新表中(类型、ActualPartureTime、ActualRivalTime、dummy_1、dummy_2、行号)
选择类型、实际部分时间、实际部分时间、,
@行号:=如果(@type=type,@row\u号+1,1)作为伪行号,
@类型:=作为虚拟_2的类型,
@行号作为行号
源表f
实际时间“0000-00-00:00:00:00”在哪里
和实际间隔时间>(现在()-间隔1个月)
按类型排序;

这是您的查询,已重写,因此变量初始化位于
from
子句中:

insert into newtable(type, actualdeparturetime, actualarrivaltime,
                     dummy_1, dummy_2, row_number
                    )
    select type, actualdeparturetime, actualarrivaltime,
           @row_number := if(@type=type, @row_number+1, 1) as dummy_1,
           @type := type as dummy_2,
           @row_number as row_number
    from sourcetable f cross join
         (select @type := '',  @row_number := 1) vars
    where actualarrivaltime <> '0000-00-00 00:00:00' AND
          actualarrivaltime > (now()-INTERVAL 1 MONTH)
    order by type ; 

这将
@type
的赋值移动到
if
else
子句。这个版本也更安全,因为MySQL不保证
select
表达式的处理顺序。如果按相反的顺序处理,则原始版本中的变量将全部混乱。

SELECT是一个子查询,应该位于“(“”)中。对不起,我不明白。请重新编写代码并显示给我好吗?
insert into newtable(type, actualdeparturetime, actualarrivaltime, row_number
                    )
    select type, actualdeparturetime, actualarrivaltime,
           @row_number := if(@type = type, @row_number+1, if(@type := type is null, 1, 1)) as row_number,
    from sourcetable f cross join
         (select @type := '',  @row_number := 1) vars
    where actualarrivaltime <> '0000-00-00 00:00:00' AND
          actualarrivaltime > (now()-INTERVAL 1 MONTH)
    order by type ;