MySQL - результаты GROUP по одному столбцу вместе с ORDER BY и LIMIT - PullRequest
0 голосов
/ 28 августа 2018

Я хочу выбрать список задач из моей базы данных. Задачи имеют category_id. Я хочу получить одно задание за category_id. Так, если бы у меня, например, было 10 task с, которые связаны с 6 categories, что привело бы к 6 результатам. 6 результатов, которые я хочу, определяются по их идентификатору, самый низкий 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

Что не так с приведенным выше запросом, я понятия не имею, я также затрудняюсь получить какие-либо результаты 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');

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете сначала попытаться найти наименьший идентификатор для каждой категории, а затем объединить его с таблицей задач, чтобы получить оставшиеся данные.

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
...