如何使用mySQL订购、分组、订购

如何使用mySQL订购、分组、订购,mysql,group-by,greatest-n-per-group,Mysql,Group By,Greatest N Per Group,这是我表格的简化版本 tbl_records -title -created -views 我想知道如何查询它们按标题分组的位置,但是为每个组返回的记录是最近创建的。然后我将按视图排序 我想有一种方法是执行子查询,按创建的顺序排序,然后按标题分组,然后根据这些结果按视图排序。我想还有更好的办法 谢谢 编辑: -title: Gnu Design -created: 2009-11-11 14:47:18 -views: 104 -title: Gnu Design -created:2010

这是我表格的简化版本

tbl_records
-title
-created
-views
我想知道如何查询它们按标题分组的位置,但是为每个组返回的记录是最近创建的。然后我将按视图排序

我想有一种方法是执行子查询,按创建的顺序排序,然后按标题分组,然后根据这些结果按视图排序。我想还有更好的办法

谢谢

编辑:

-title: Gnu Design
-created: 2009-11-11 14:47:18
-views: 104

-title: Gnu Design
-created:2010-01-01 21:37:09
-views:9

-title: French Connection
-created:2010-05-01 09:27:19
-views:20
样本数据:

-title: Gnu Design
-created: 2009-11-11 14:47:18
-views: 104

-title: Gnu Design
-created:2010-01-01 21:37:09
-views:9

-title: French Connection
-created:2010-05-01 09:27:19
-views:20
我希望结果是:

-title: French Connection
-created:2010-05-01 09:27:19
-views:20

-title: Gnu Design
-created:2010-01-01 21:37:09
-views:9
只显示最新的Gnu设计,然后按视图排序结果

 select i.*, o.views from
   (
       select
       title
       , max(created) as last_created
       from tbl_records
       group by title
   ) i inner join tbl_records o
   on i.title = o.title and i.last_created = o.created
   order by o.views desc
我假设要应用于
视图的聚合是
count()
,但很可能是错误的(您需要有某种方法来定义希望对最新创建的标题使用哪种视图度量)。希望有帮助


编辑:已查看您的样本数据并进行了相应编辑。

这是StackOverflow上经常出现的
每组n个最大问题的一个示例

SELECT title, 
       MAX(created), 
       views 
FROM table 
GROUP BY title 
ORDER BY views DESC
以下是我通常的解决方案:

SELECT t1.*
FROM tbl_records t1
LEFT OUTER JOIN tbl_records t2 ON (t1.title = t2.title AND 
  (t1.created < t2.created OR t1.created = t2.created AND t1.primarykey < t2.primarykey))
WHERE t2.title IS NULL;
选择t1*
来自tbl_记录t1
左外连接tbl_记录t2 ON(t1.title=t2.title和
(t1.created

说明:查找不存在具有相同
标题
和更大
创建日期的其他行
t2
的行
t1
。如果是tie,请使用一些唯一的键来解决tie,除非每个
标题可以获得多行

,否则如果您有示例数据,会更清楚。是的,请澄清问题。