简体   繁体   English

MySQL多条选择语句

[英]mysql select statement from multiple statement

SET @row_number:=0;
SET @db_names:='';
SELECT @row_number:=CASE WHEN @db_names=app_id THEN @row_number+1 ELSE 1 END AS row_number,@db_names:=app_id AS db_names
FROM master_order 
ORDER BY app_id ;

When I run this statement it gives me result. 当我运行此语句时,它会给我结果。

I want it like 我想要它

select *from (SET @row_number:=0;
SET @db_names:='';
SELECT @row_number:=CASE WHEN @db_names=app_id THEN @row_number+1 ELSE 1 END AS row_number,@db_names:=app_id AS db_names
FROM master_order 
ORDER BY app_id ) as temp

where row_number = 1;

I want to select the first row of duplicate columns 我想选择重复列的第一行

You can simplify this like this: 您可以这样简化:

SELECT * FROM master_order
ORDER BY app_id = '' DESC, app_id
LIMIT 1;

But for clarification on how it would've worked if this simplification would not be possible, either this way: 但是为了澄清如果无法进行这种简化将如何工作,可以通过以下两种方式:

SET @row_number:=0;
SET @db_names:='';

select *from (
    SELECT @row_number:=CASE WHEN @db_names=app_id THEN @row_number+1 ELSE 1 END AS row_number,@db_names:=app_id AS db_names
    FROM master_order 
    ORDER BY app_id 
) as temp
where row_number = 1;

or this: 或这个:

select *from (
    SELECT @row_number:=CASE WHEN @db_names=app_id THEN @row_number+1 ELSE 1 END AS row_number,@db_names:=app_id AS db_names
    FROM master_order 
    CROSS JOIN (SELECT @row_number := 0, @db_names := '') var_init
    ORDER BY app_id 
) as temp
where row_number = 1;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM