Получить строки с условием последней строки группировки - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть таблица favourite_products со схемой, как показано ниже.Мне нужно посчитать, сколько людей (account_id) любят продукт с id = 12. Но условие заключается в том, что человек пометил продукт как понравившийся в прошлый раз.

В этом примере пользователь с id = 1 отметил продукт 12 как положительныйв первый раз, но затем он отметил, что это не является положительным, поэтому это значение не должно быть возвращено.В следующем примере должны быть возвращены 2 строки (для user_id = 5 и user_id = 8).Я слышал об оконной функции, но в версии 5.7 есть mysql, и я не могу ее обновить.У вас есть идеи, как написать этот запрос?

| id |  user_id | product_id | positive |
| 1  |     1    |    12      |    1     |
| 2  |     1    |    12      |    0     |
| 3  |     1    |    15      |    1     |
| 4  |     5    |    12      |    1     |
| 5  |     5    |    12      |    1     |
| 6  |    11    |    18      |    1     |
| 7  |     8    |    12      |    1     |
| 8  |     8    |    12      |    1     |

1 Ответ

0 голосов
/ 21 ноября 2018

Следующий подход должен работать для всех случаев, включая случай, когда продукт не понравился, а затем снова понравился в конце.

В Производной таблице мы можем получить максимумid значение для каждого user_id и product_id = 12.Этот набор результатов будет соответствующим образом присоединен к основной таблице.Это приведет нас к полной строке (недавнее действие, выполненное пользователем для продукта).

Теперь мы можем рассматривать только тех пользователей, у которых последнее действие является положительным.


Запрос

SELECT fp.user_id
FROM   favourite_products AS fp
       JOIN (SELECT user_id,
                    Max(id) AS max_id
             FROM   favourite_products
             WHERE  product_id = 12
             GROUP  BY user_id) AS dt
         ON dt.user_id = fp.user_id
            AND dt.max_id = fp.id
            AND fp.positive = 1;

Результат

| user_id |
| ------- |
| 5       |
| 8       |

Просмотр на БД Fiddle

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