2014-09-18 3 views
0
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 ; 

Когда я запускаю это утверждение, это дает мне результат.mysql select statement from multiple statement

Я хочу, чтобы это как

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; 

Я хочу, чтобы выбрать первый ряд дублирующих колонн

ответ

0

Вы можете упростить это так:

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

Но для разъяснения о том, как это будет работала, если это упрощение было бы невозможным, либо таким образом:

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; 

или это:

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; 
+0

что делает это достижение? ** ORDER BY app_id = '' DESC ** –

+0

'app_id = ''' либо true, либо false, 1 или 0. OP хочет иметь первое место, где app_id - пустая строка, поэтому сортируем по убыванию упомянутого логического а затем app_id, потому что OP хочет иметь первый app_id, который не пуст. – fancyPants