Да. Выполняется около 1.5 ч. Приведу полностью запрос:
DECLARE @COURSES TABLE (
id bigint
);
INSERT @COURSES
SELECT cs.id
FROM courses cs
JOIN course c ON c.id=cs.id
WHERE c.data.exist('course/custom_elems/custom_elem[name=\"remove_worst_attempts\" and value=\"true\"]')=1;
DECLARE @LEARNINGS TABLE (
person_id bigint,
course_id bigint
);
INSERT @LEARNINGS
SELECT ls.person_id,
ls.course_id
FROM learnings ls
WHERE ls.course_id IN (SELECT id FROM @COURSES)
GROUP BY ls.course_id, ls.person_id
HAVING COUNT(ls.id)>1;
DECLARE @TOP_LEARNINGS TABLE (
id bigint
);
INSERT @TOP_LEARNINGS
SELECT id = (
SELECT TOP 1 id
FROM learnings
WHERE person_id=l.person_id AND course_id=l.course_id
ORDER BY (
CASE
WHEN state_id=4 THEN 5
WHEN state_id=2 THEN 4
WHEN state_id=5 THEN 3
WHEN state_id=3 THEN 2
ELSE state_id
END
) DESC, score DESC, creation_date DESC
)
FROM @LEARNINGS as l;
SELECT id
FROM learnings ls
WHERE ls.id NOT IN (SELECT id FROM @TOP_LEARNINGS)
AND ls.course_id IN (SELECT id FROM @COURSES);
Я предполагаю, что возможно есть способ оптимизировать по скорости конструкцию типа "для каждой записи выбрать максимальное значение с учетом нескольких параметров".
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Я предполагаю, что возможно есть способ оптимизировать по скорости конструкцию типа "для каждой записи выбрать максимальное значение с учетом нескольких параметров".