Как получить наименьшее количество в серии предметов, для каждой серии? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть две таблицы в моей базе данных, одна с проектами, а другая с билетами. Я хочу первый билет для каждого проекта. Настольный проект имеет:

  • AAA
  • BBB
  • CCC

Настольные билеты имеют:

  • ААА-1
  • ААА-2
  • ВВВ-2
  • ВВВ-3
  • CCC -100
  • CCC -101

Мне нужен список наименьших заявок в каждом проекте, поэтому результатом должны быть AAA-1, BBB-2, CCC -101. Это возможно только с sql? Нужна ли мне функция? Я пробовал с min и joins, но я не могу их правильно смешать ...

Спасибо

1 Ответ

0 голосов
/ 22 апреля 2020

Возможно, самый простой метод:

select concat(substring_index(ticket, '-', 1), , '-',
              min(substring_index(ticket, '-', -1) + 0)
             ) as first_ticket
from t
group by substring_index(ticket, '-', 1)

Восстанавливает значение после взятия min() в качестве числа.

Если вы не хотите восстанавливать значение:

select (select t.ticket
        from tickets t
        where t.ticket like concat(p.project, '-%')
        order by length(ticket), ticket
        limit 1
       ) as first_ticket
from projects p;

При этом используются только строковые операции для минимального значения, поэтому предполагается, что заполнение нулями отсутствует. Также можно изменить, чтобы использовать числа:

        order by p.project, substring_index(ticket, '-', -1) + 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...