MySQL - GROUP 结果 BY 与 ORDER BY 和 LIMIT 一起的单列
MySQL - GROUP results BY a single column alongside ORDER BY and LIMIT
我想 select 我的数据库中的任务列表。任务有 category_id
。我想每个 category_id
获得一个 singlur 任务。因此,例如,如果我有 10 个 task
链接到类似 6 categories
的链接,这将导致 6 结果。我要的6个结果由id决定,GROUP BY
中最低的id
是那个GROUP
的正确记录。此外,最大结果集不能大于 20 ('LIMIT')。
SELECT * FROM `task` WHERE `datetime`<NOW() `task_status_id`=1 GROUP BY `category_id` ORDER BY `id` ASC LIMIT 20
上面的查询有什么问题,我没有任何线索,我也不知所措 google 结果。
稍后添加
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,然后将其加入任务 table 以获取剩余的详细信息。
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
我想 select 我的数据库中的任务列表。任务有 category_id
。我想每个 category_id
获得一个 singlur 任务。因此,例如,如果我有 10 个 task
链接到类似 6 categories
的链接,这将导致 6 结果。我要的6个结果由id决定,GROUP BY
中最低的id
是那个GROUP
的正确记录。此外,最大结果集不能大于 20 ('LIMIT')。
SELECT * FROM `task` WHERE `datetime`<NOW() `task_status_id`=1 GROUP BY `category_id` ORDER BY `id` ASC LIMIT 20
上面的查询有什么问题,我没有任何线索,我也不知所措 google 结果。
稍后添加
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,然后将其加入任务 table 以获取剩余的详细信息。
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