Ранг 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 и наблюдали за комментариями об использовании параметра для этой цели, но может показаться, что получают только числа для ВСЕХ записей, а не числа для каждого пользователя