Ранг SQL и возвращение верхних X строк на человека

Для этого вопроса я создал две таблицы ниже:

CREATE TABLE test_JobList 
(
    UserName VARCHAR(20),
    JobDue DATETIME,
    JobName VARCHAR(30)
);
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Andrew', '2020-07-01', 'Job A');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Andrew', '2020-07-03', 'Job B');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Andrew', '2020-07-05', 'Job C');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Andrew', '2020-07-02', 'Job D');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Andrew', '2020-07-01', 'Job E');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Andrew', '2020-07-08', 'Job F');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Robert', '2020-07-04', 'Job G');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Robert', '2020-07-03', 'Job H');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Robert', '2020-07-05', 'Job I');
INSERT INTO test_JobList (UserName, JobDue, JobName) VALUES ('Robert', '2020-07-01', 'Job J');

CREATE TABLE test_JobMatrix
(
    UserName varchar(20),
    CountJobs INT
);
INSERT INTO test_JobMatrix (UserName, CountJobs) VALUES ('Andrew', 4);
INSERT INTO test_JobMatrix (UserName, CountJobs) VALUES ('Robert', 2);

Моя цель - использовать "CountJobs" в качестве ограничения количества возвращаемых заданий на человека, чтобы я получил следующий результат, отмечая 4 записи для Эндрю и 2 для Роберта, упорядоченных по JobDue.

UserName   JobDue                JobName
--------   -------------------   -------
Andrew     2020-07-01 00:00:00   Job A
Andrew     2020-07-01 00:00:00   Job E
Andrew     2020-07-02 00:00:00   Job D
Andrew     2020-07-03 00:00:00   Job B
Robert     2020-07-01 00:00:00   Job J
Robert     2020-07-03 00:00:00   Job H

Я вижу, что это, вероятно, достижимо, используя ROW_NUMBER() OVER (PARTITION BY j.UserName ORDER BY j.JobDue), но мы используем MySQL v10.1, поэтому у нас нет ROW_NUMBER() функция.

Прочитали проблему с использованием функции ROW_NUMBER() в MariaDB и наблюдали за комментариями об использовании параметра для этой цели, но может показаться, что получают только числа для ВСЕХ записей, а не числа для каждого пользователя

0 ответов

Другие вопросы по тегам