Mysql 分组依据,订单依据,每组限值

Mysql 分组依据,订单依据,每组限值,mysql,group-by,limit,Mysql,Group By,Limit,我正在开发一个小的rss提要电子邮件发送程序 我拥有的四个表是用户、提要、订阅和分发。提要包含实际的提要详细信息,订阅将用户与提要连接起来,分发记录rss提要帖子的电子邮件事务 我试图查询分发表,以获取每个用户/订阅源订阅的最新记录。我有下面的查询,但它显然只返回一行。我需要使用一个子查询,但我不知道如何使用 SELECT d.id, d.user_id, d.feed_id, d.created FROM Distribution AS d INNER JOIN Feeds AS f ON f

我正在开发一个小的rss提要电子邮件发送程序

我拥有的四个表是用户、提要、订阅和分发。提要包含实际的提要详细信息,订阅将用户与提要连接起来,分发记录rss提要帖子的电子邮件事务

我试图查询分发表,以获取每个用户/订阅源订阅的最新记录。我有下面的查询,但它显然只返回一行。我需要使用一个子查询,但我不知道如何使用

SELECT d.id, d.user_id, d.feed_id, d.created
FROM Distribution AS d
INNER JOIN Feeds AS f ON f.id = d.feed_id
INNER JOIN Subscriptions AS s ON s.feed_id = d.feed_id
GROUP BY d.id, d.user_id, d.feed_id
ORDER BY d.created DESC 
LIMIT 1
分布表数据 id,已创建,提要id,发布id,用户id,成功

(0, '2012-08-31 09:37:49', 20, 3, 2, 1)
(1, '2012-08-25 09:36:21', 20, 1, 1, 1)
(2, '2012-08-25 09:37:49', 21, 1, 2, 1)
(4, '2012-08-25 09:39:06', 21, 4, 1, 1)
(5, '2012-08-25 10:12:29', 20, 7, 2, 0)
(6, '2011-05-24 10:34:30', 20, 112, 1, 0)
下面的查询生成以下结果

SELECT Distribution.*
FROM   Distribution NATURAL JOIN (
  SELECT   user_id, feed_id, MAX(created) AS created
  FROM     Distribution
  GROUP BY user_id, feed_id
) t

(0, '2012-08-31 09:37:49', 20, 3, 2, 1)
(1, '2012-08-25 09:36:21', 20, 1, 1, 1)
(2, '2012-08-25 09:37:49', 21, 1, 2, 1)
(4, '2012-08-25 09:39:06', 21, 4, 1, 1)
正如报告中所述:

服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,不能通过添加
ORDER by
子句来影响每组值的选择。结果集的排序发生在选择值之后,并且
orderby
不会影响服务器选择的值

您正在尝试查找,这需要使用子查询来标识最新记录

子查询本身应该在
created
列上使用MySQL函数来标识每个组中最近记录的对应值,然后使用该信息与外部/父查询中的表进行连接。我认为这就是您所追求的,但是如果没有表模式/示例数据,很难确定(至少它应该让您走上正确的道路):


能给我指出正确的方向吗?是的,那个搜索根本没用。谢谢你的回复。这会提取唯一的用户id/feed id分发记录,但不会提取这些记录的最大值(已创建)records@David:应该是。你能发布一些样本数据吗?哇,开玩笑!我把数据输入搞砸了。我想它在我需要的时候起作用了。谢谢
SELECT Distribution.*
FROM   Distribution NATURAL JOIN (
  SELECT   user_id, feed_id, MAX(created) AS created
  FROM     Distribution
  GROUP BY user_id, feed_id
) t