mysql唯一语句

mysql唯一语句,mysql,sql,group-by,Mysql,Sql,Group By,我有一张这样的桌子 ID | date | CODE 1 01-02-13 VDOT 2 03-02-13 CMAX 3 05-02-13 VDOT 1 05-02-13 CMAX 1 09-02-13 VDOT 我的SQL查询如下 SELECT * FROM Table_Name ; 这显然显示了所有结果,但我只需要显示每个代码的一个实例,其中日期是最近的,

我有一张这样的桌子

ID     |   date  |    CODE 

1        01-02-13     VDOT
2        03-02-13     CMAX
3        05-02-13     VDOT
1        05-02-13     CMAX
1        09-02-13     VDOT
我的SQL查询如下

SELECT * FROM Table_Name ;
这显然显示了所有结果,但我只需要显示每个代码的一个实例,其中日期是最近的,所以我的结果需要如下所示

1        09-02-13     VDOT
1        05-02-13     CMAX
有谁能告诉我如何只为每个代码获得一个结果(按日期列出的最新条目)?

试试以下方法:

SELECT * FROM Table_Name 
GROUP BY CODE
ORDER BY date DESC
SELECT * FROM 
(SELECT * FROM Table_Name ORDER BY date DESC) tx2 
GROUP BY CODE
这将在分组后排序。因此,在分组结果中发出命令

但现在试试这个:

SELECT * FROM 
(SELECT * FROM Table_Name ORDER BY date DESC) tx2 
GROUP BY CODE
这将确保分组前的日期顺序正确。

尝试以下操作:

SELECT * FROM Table_Name 
GROUP BY CODE
ORDER BY date DESC
SELECT * FROM 
(SELECT * FROM Table_Name ORDER BY date DESC) tx2 
GROUP BY CODE
SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  CODE, MAX(date) max_date
            FROM    TableName
            GROUP   BY CODE
        ) b ON  a.Code = b.Code AND
                a.date = b.max_date
这将在分组后排序。因此,在分组结果中发出命令

但现在试试这个:

SELECT * FROM 
(SELECT * FROM Table_Name ORDER BY date DESC) tx2 
GROUP BY CODE

这将确保分组前的日期顺序正确。

请注意,这仅在MySQL中有效,但在所有其他DBMS中都是无效的SQL,或者如果MySQL已配置为“strict_GROUP_by”,这很简单,但不会始终为您提供正确的值,请参见此处@JW:只有在
选择中提到字段时,您提到的内容才会成为问题。但是这里提到了
*
,因此它会起作用。@JW:在那一页上提到的第二件事是关于使用诸如
FLOOR
COUNT
等函数。它们在这里也不使用。让我问你,你有处理大型数据库的经验吗?根据文档,如果在
GROUP BY
子句中不指定非聚合列而使用
GROUP BY
,则不能保证在非聚合列上返回相同的值。因为您只测试了5条记录,所以您的查询可能会起作用。无论如何,您的答案被选为正确答案
:)
请注意,这只在MySQL中有效,但在所有其他DBMS中都是无效的SQL,或者如果MySQL已配置为“strict_group_by”,这很简单,但不会始终为您提供正确的值,请参见此处@JW:只有在
选择中提到字段时,您提到的内容才会成为问题。但是这里提到了
*
,因此它会起作用。@JW:在那一页上提到的第二件事是关于使用诸如
FLOOR
COUNT
等函数。它们在这里也不使用。让我问你,你有处理大型数据库的经验吗?根据文档,如果在
GROUP BY
子句中不指定非聚合列而使用
GROUP BY
,则不能保证在非聚合列上返回相同的值。因为您只测试了5条记录,所以您的查询可能会起作用。无论如何,您的答案被选为正确答案
:)
SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  CODE, MAX(date) max_date
            FROM    TableName
            GROUP   BY CODE
        ) b ON  a.Code = b.Code AND
                a.date = b.max_date