6

这是我的表格的简化版本

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: French Connection
-created:2010-05-01 09:27:19
-views:20

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

仅显示最新的 Gnu 设计,然后按视图对结果进行排序。

4

3 回答 3

3

greatest-n-per-group这是StackOverflow 上经常出现的问题示例。

这是我通常的解决方案:

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其他行的行。在平局的情况下,使用一些唯一的键来解决平局,除非每个.t2titlecreatedtitle

于 2010-01-23T00:19:48.567 回答
1
 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

我假设要应用的聚合viewscount(),但很可能是错误的(您需要有一些方法来定义您希望为最新创建的标题拥有哪种视图度量)。希望有帮助。

编辑:已经查看了您的示例数据并进行了相应的编辑。

于 2010-01-22T19:08:37.927 回答
0
SELECT title, 
       MAX(created), 
       views 
FROM table 
GROUP BY title 
ORDER BY views DESC
于 2010-01-22T19:13:51.493 回答