繁体   English   中英

MySQL-将结果分组通过ORDER BY和LIMIT的单列

[英]MySQL - GROUP results BY a single column alongside ORDER BY and LIMIT

我想从数据库中选择任务列表。 任务有一个category_id 我想每个category_id获得一个单一任务。 因此,例如,如果我有10个task ,它们链接到类似6个categories ,则将导致6个结果。 6个结果我想用自己的ID来确定,最低的id在中GROUP BY是正确的记录GROUP 同样,最大结果集不能大于20('LIMIT')。

SELECT * FROM `task` WHERE `datetime`<NOW()  `task_status_id`=1 GROUP BY `category_id` ORDER BY `id` ASC LIMIT 20

上面的查询有什么问题,我不知道,我对此也一无所获。

以后添加

http://sqlfiddle.com/#!9/fa39cf

CREATE TABLE `category` (
  `id` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `category` (`id`) VALUES
(1),
(2),
(3);


CREATE TABLE `task` (
  `id` int(10) UNSIGNED NOT NULL,
  `category_id` int(10) UNSIGNED NOT NULL,
  `task_status_id` int(10) UNSIGNED DEFAULT '1',
  `datetime` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `task` (`id`, `category_id`, `task_status_id`, `datetime`) VALUES
(3, 2, 1, '2018-07-24 11:20:26'),
(4, 2, 1, '2018-07-24 11:20:26'),
(5, 3, 1, '2018-07-24 11:21:35'),
(6, 3, 1, '2018-07-24 11:21:35');

您可以尝试首先为每个类别找到最小的ID,然后将其与任务表结合以获取剩余的详细信息。

SELECT t.* FROM task t 
JOIN (SELECT category_id, min(id) id from task group by category_id) tc 
    ON (t.id = tc.id)
LIMIT 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM