将结果按单个列与order by和limit一起分组

lo8azlld  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(302)

我想从数据库中选择任务列表。任务具有 category_id . 我想得到一个新的任务 category_id . 例如,如果我有10个 task 链接到6的 categories 这将导致6个结果。我想要的6个结果是由他们的id决定的,最低的 idGROUP 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');
8mmmxcuj

8mmmxcuj1#

您可以尝试先为每个类别查找最小的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

相关问题