У меня есть скрипт, который работает, но не так, как хотелось бы. Моя цель - выбрать самую последнюю введенную запись в базе данных plans
для каждого продавца в списке account_manager_sellers
.
Текущая проблема с приведенным ниже сценарием: например, он возвращает самую старую запись, а не самую новую, например: он выбирает запись в 2016 году, а не ту, которая имеет метку времени в 2018. (в конце концов мне нужно изменить Предложение WHERE для получения всех записей lastsale
до 2017-01-01.
Простые образцы базы данных.
plans
AKA (список продаж)
+----+------------------+-----------+
| id | plan_written | seller_id |
+----+------------------+-----------+
| 1 | 20/09/2016 09:12 | 123 |
| 2 | 22/12/2016 09:45 | 444 |
| 3 | 19/10/2016 09:07 | 555 |
| 4 | 02/10/2015 14:26 | 123 |
| 5 | 15/08/2016 11:06 | 444 |
| 6 | 16/08/2016 11:03 | 123 |
| 7 | 03/10/2016 10:15 | 555 |
| 8 | 28/09/2016 10:12 | 123 |
| 9 | 27/09/2016 15:12 | 444 |
+----+------------------+-----------+
account_manager_sellers
(список продавцов)
+-----+----------+
| id | name |
+-----+----------+
| 123 | person 1 |
| 444 | person 2 |
| 555 | person 3 |
+-----+----------+
Используемый текущий код
SELECT p.plan_written, p.seller_id
FROM plans AS p NATURAL JOIN (
SELECT id, MAX(plan_written) AS lastsale
FROM plans
GROUP BY seller_id
) AS t
JOIN account_manager_sellers AS a ON a.id = p.seller_id
WHERE lastsale < "2018-05-08 00:00:00"
Краткое описание
Используя приведенный выше код и таблицы примеров, этот код будет возвращать эти 3 результата, в то время как мы ожидаем, что 3 результата MAX (plan_written
), похоже, не последовали, я предполагаю, что это как-то связано с предложение GROUP, я не уверен, сможем ли мы использовать предложения ORDER BY и LIMIT?
+--------------+------------------+
| seller_id | plan_written |
+--------------+------------------+
| 123 | 16/08/2016 11:03 |
| 444 | 15/08/2016 11:06 |
| 555 | 03/10/2016 10:15 |
+--------------+------------------+