tags:

views:

476

answers:

2

Hi

i far as i know mysql GROUP BY grouping to the last find record.

Is there any solution to GROUP BY the first record

I have setup the ORDER in SQL command and i need GROUP BY return the first record and not the last

EDIT

Here is the Query

SELECT 
  DISTINCT(master.masterID),
  langData.*,
  master.* 
FROM master_table as master 
INNER JOIN lang_table as langData ON 
langData.masterID=master.masterID 
GROUP BY master.masterID 
ORDER BY 
CASE 
    WHEN langData.lang='currentLang' THEN 1 ELSE 999 END , 
    master.name desc LIMIT 0,10 

The query above select the masterID for multi language table and suppose to return FIRST the records in currentLang and order them by name AND THEN all other languages

DONT ask me with i dont set the language in JOIN.This is the way to be done.

SO everything works Fine so far expect the scenario that i have a record with languages en and fr.If currentLang is en then based on langData.lang='currentLang' THEN 1 ELSE 999 END the en order is 1 and fr order is 999 and instead of getting the value of en i get the value of fr.

Thats why i want group to the first row.

+1  A: 

Add LIMIT 1 to your query.

Daniel A. White
not possible.Reading record for the grid and paging
ntan
+2  A: 

I assume you are talking of something like

SELECT  *
FROM    mytable
GROUP BY
        column

You shouldn't use unaggregated expressions in GROUP BY unless they are all same within the group.

If you want to return the record holding the least value of an expression within a group, use this:

SELECT  mo.*
FROM    (
        SELECT  DISTINCT column
        FROM    mytable
        ) md
JOIN    mytable mo
ON      mo.id = 
        (
        SELECT  id
        FROM    mytable mi
        WHERE   mi.column = md.column
        ORDER BY
                mi.column, mi.someorder
        LIMIT 1
        )
Quassnoi
query is now posted
ntan