问题 GROUP BY返回第一条记录


据我所知,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 对于多语言表,并假设返回FIRST记录 currentLang 并按名称和所有其他语言订购它们。

不要问我为什么不在JOIN中设置语言。这是要做的方法。

所以到目前为止一切正常,期待我有语言记录的情景 en 和 fr。如果 currentLang 是 en 然后基于

langData.lang='currentLang' THEN 1 ELSE 999 END

en 订单是1和 fr 订单是999而不是获得的价值 en 我得到的价值 fr

这就是我想要分组到第一行的原因。


7455
2018-03-02 11:24


起源

我不会问你为什么不设置语言 JOIN相反,我会告诉你,这种方式不起作用。一个未分类的表达式 GROUP BY 返回每个组中的任意记录,如果值不同,则不应使用该记录。您可以从中返回任何记录 master_table (他们在每个小组中都是相同的)但不是来自 lang_table。无法保证将返回哪条记录,nada,niente。 BTW,你为什么这么做 DISTINCT 在这里,它的目的是什么? - Quassnoi
我试图实现“首先按名称给出我当前语言顺序的所有记录,然后按名称命名所有其他语言”含义:如果当前lang为EN,则获取EN的所有记录,然后获取其他langs.IF的所有记录在一个记录的lang表中有EN,FR返回EN值。在lang表EN中的IF不存在返回任何其他lang - ntan
这很容易做到 JOIN 像这里描述的: explainextended.com/2009/08/10/fallback-language-names-mysql 但由于一些奇怪的原因(你甚至不想被要求),你不愿意使用它。 - Quassnoi


答案:


我假设你在谈论类似的东西

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
        )

11
2018-03-02 11:36





LIMIT 1 对你的查询。


1
2018-03-02 11:27



不可能。网格和分页的记录 - ntan