据我所知,mysql GROUP BY组找到了最后一条记录。
GROUP BY第一条记录有解决方案吗?
我在SQL命令中设置了ORDER,我需要GROUP BY返回第一条记录,而不是最后一条记录。
修改
这是查询
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
上面的查询为多语言表选择masterID
,并假设首先返回currentLang
中的记录,并按名称排序,然后按所有其他语言排序。
不要问我为什么不在JOIN中设置语言。这是要做的事。
所以到目前为止一切正常,我希望我的语录有en
和fr
。如果currentLang
为en
,则基于
langData.lang='currentLang' THEN 1 ELSE 999 END
en
订单为1,fr
订单为999,而不是获取en
的值,而是获得fr
的值。
这就是我想要分组到第一行的原因。
答案 0 :(得分:11)
我假设你在谈论像
这样的事情SELECT *
FROM mytable
GROUP BY
column
您不应在GROUP BY
中使用未加聚合的表达式,除非它们在组内都相同。
如果要返回组中表达式值最小的记录,请使用:
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
)
答案 1 :(得分:1)
将LIMIT 1
添加到您的查询中。