Как получить количество вхождений строки, отсортированной по дате - PullRequest
0 голосов
/ 16 декабря 2018

sqlfidle

У меня есть таблица расписания со следующими столбцами.

id film_id theatre_id datetime

Один и тот же фильм может встречаться несколько раз, как показано ниже:

id  film_id  theatre_id  datetime
-   -------  ----------  ------
1   1        1           2018-12-07 10:00
2   1        2           2018-12-13 16:00
3   2        3           2018-12-08 10:00
4   1        1           2018-12-08 19:00

Я хотел бы иметь две колонки новостей при выборе с количеством вхождений и общим количеством шоу, сгруппированных по film_id и отсортированных по film_id, datetime, как показано ниже:

id  film_id  theatre_id  datetime           rank  count
-   -------  ----------  ------             ----  -----
1   1        1           2018-12-07 10:00   1     3 
4   1        1           2018-12-08 19:00   2     3
2   1        2           2018-12-13 16:00   3     3
3   2        3           2018-12-08 10:00   1     1

1 Ответ

0 голосов
/ 16 декабря 2018

В MySQL 8+ у вас есть оконные функции:

select s.*,
       row_number() over (partition by film_id order by datetime) as rank,
       count(*) over (partition by film_id) as count
from ff_schedule s;

В более ранних версиях это может быть проще всего при использовании коррелированных подзапросов:

select s.*,
       (select count(*)
        from ff_schedule s2
        where s2.film_id = s.film_id and
              s2.datetime < s.datetime
       ) as rank,
       (select count(*)
        from ff_schedule s2
        where s2.film_id = s.film_id 
       ) as cnt
from ff_schedule s;

Для производительности вам нужен индексна ff_schedule(film_id, datetime).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...