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