GROUP BY return the first record [duplicate]
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.
精彩评论