开发者

GROUP BY return the first record [duplicate]

This question already has answers here: How to optimize MySQL query (group and order) (4 answers) Closed last year.

As far as I know mysql GROUP BY groups to the last record fou开发者_StackOverflow社区nd.

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.

Don't ask me why I don't 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.

That's why I want to group to the first row.


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
        )


Add LIMIT 1 to your query.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜