Рейтинг MySQL по топ-N для каждой группы, основанный на последних строках группы - PullRequest
1 голос
/ 18 марта 2019

Для каждой группы TS есть случайное количество строк, которые имеют разные Name, и это Count.Я хотел бы сделать следующее:

  1. Получить последнюю группу TIMESTAMP с заказом NAME desc на Count.Для более чем 3 строк в последней группе остаток суммируется на Count и переименовывается в «Другое».
  2. Для каждой группы TIMESTAMP найдите строки, имеющие NAME на шаге 1.
  3. Если не найдено, 0 дополняется как Count для пары в определенной группе.

Посмотрите на иллюстрацию:

TS         | Name     | Count
=============================
1552286160 | Apple    | 7
1552286160 | Orange   | 8
1552286160 | Grape    | 8
1552286160 | Pear     | 9
1552286160 | Kiwi     | 10
1552286160 | Berry    | 3
1552286160 | Carrot   | 2

1552286100 | Apple    | 10
1552286100 | Orange   | 12
1552286100 | Grape    | 14
1552286100 | Pear     | 16
1552286100 | Kiwi     | 9

1552286040 | Apple    | 4

1552285980 | Peach    | 8

С этим набором данныхЯ хотел бы иметь следующее:

TS         | Name     | Count
=============================
1552286160 | Kiwi     | 10
1552286160 | Pear     | 9
1552286160 | Grape    | 8
1552286160 | Other    | 8 + 7 + 3 + 2

1552286100 | Kiwi     | 9
1552286100 | Pear     | 16
1552286100 | Grape    | 14
1552286100 | Other    | 10 + 9

1552286040 | Kiwi     | 0
1552286040 | Pear     | 0
1552286040 | Grape    | 0
1552286040 | Other    | 4

1552286040 | Kiwi     | 0
1552286040 | Pear     | 0
1552286040 | Grape    | 0
1552286040 | Other    | 8

Это на самом деле расширенное решение, полученное из MySQL top-N ранжирования и суммирования остальной части той же группы Однако решение несгруппируйте каждую TS группу с теми же строками из последней TS группы, в данном случае TS=1552286160.

Подготовленная мной скрипта SQL находится здесь: http://sqlfiddle.com/#!9/4e13004/1

Спасибо, если у вас есть идеи.

...