Я использую MySql 5.6 , и у меня есть 2 таблицы (упрощенные для сокращения nb столбцов до значения, которое имеет значение для этого вопроса) с запросом, который использует сегодня LEFT JOIN для выбора строк.
Вот скрипка для проверки вашего решения: https://www.db -fiddle.com / f / nGVFhr3xMwKk9CDw6N6FWc / 13
Таблица 'query_results'
+-----------------------------+------------+--------------+-----------
| query_result_id | query_id | author | datecol
+-----------------------------+------------+--------------+-----------
| 100 | 1 | john | 80
| 101 | 1 | eric | 70
| 102 | 2 | emily | 100
| 103 | 2 | emily | 100
| 104 | 4 | emily | 120
| 105 | 3 | emily | 50
+-----------------------------+------------+--------------+-----------
Таблица 'Customers_emails'
+-------------------+-----------------+--------------+-----------+-------------+
| customer_email_id | query_result_id | customer_id | author | email_nb
+-------------------+-----------------+--------------+-----------+-------------+
| 5 | 758 | 12 | mathew | 0
| 12 | 102 | 12 | emily | 0
| 13 | 103 | 12 | emily | 1
| 14 | 104 | 12 | emily | 9
| 15 | 102 | 7 | emily | 2
+-------------------+-----------------+--------------+-----------+-------------+
Мой текущий запрос успешно извлекает все query_results для данного query_id = 2
и данного customer_id = 12
и некоторых другихнезначительные ограничения (такие как datecol> 30).
SELECT
qr.query_result_id,
qr.query_id,
qr.author
FROM
query_results qr
LEFT JOIN
customers_emails coe
ON
qr.author = coe.author AND
coe.customer_id = 12
WHERE
qr.query_id = 2 AND
qr.datecol >= 30 AND
qr.author IS NOT NULL
AND qr.author NOT IN (
SELECT author
FROM customers_emails
WHERE
(
customer_id = 12 AND
email_nb = 3
)
)
GROUP BY
qr.author
ORDER BY
qr.query_result_id ASC
LIMIT
2
Этот запрос выше работает отлично (я удовлетворен) и дает мне:
Сегодня Мой вывод:
+-------------------+-----------------+--------------+
| query_result_id | query_id | author |
+-------------------+-----------------+--------------+
| 102 | 2 | emily |
+-------------------+-----------------+--------------+
Теперь моя цель и где я терплю неудачу: я просто хочу добавить новый столбец с именем max_email_nb к текущему выводу, который будет ** "самым высоким email_nb
отправлено
- по заданному
customer_id
(= 12) - по этому заданному
query_id
(= 2) - до
author
f каждой строкииз текущего вывода SQL, в приведенном выше примере это emily
(но может быть больше строк, и его нельзя предсказать: оно исходит из текущего запроса!) **
Я пыталсяиспользуйте MAX ():
SELECT
qr.query_result_id,
qr.query_id,
qr.author,
MAX(coe.email_nb) as max_email_nb
FROM
query_results qr
LEFT JOIN
customers_emails coe
ON
qr.author = coe.author AND
coe.customer_id = 12
WHERE
qr.query_id = 2 AND
qr.datecol >= 30 AND
qr.author IS NOT NULL
AND qr.author NOT IN (
SELECT author
FROM customers_emails
WHERE
(
customer_id = 12 AND
email_nb = 3
)
)
GROUP BY
qr.author
ORDER BY
qr.query_result_id ASC
LIMIT
2
Сегодня мой вывод:
+-------------------+-----------------+--------------+-----------------+-------------
| query_result_id | query_id | author | max_email_nb | ...
+-------------------+-----------------+--------------+-----------------+------------
| 102 | 2 | emily | 9 |
+-------------------+-----------------+--------------+-----------------+------------
Неправильное значение в max_email_nb : в зависимости от того, что я собираюсь сделать, яожидайте, что значение max_email_nb будет равно 1
вместо 9
.Я ожидаю вывод:
+-------------------+-----------------+--------------+-----------------+-------------
| query_result_id | query_id | author | max_email_nb | ...
+-------------------+-----------------+--------------+-----------------+------------
| 102 | 2 | emily | 1 |
+-------------------+-----------------+--------------+-----------------+------------
Действительно, я хочу получить для каждого query_result
, который выводится моим SQL-запросом, наибольшее значение email_nb, отправленное given Customer_id 12
на query_id 2
этому author
(в этой конкретной строке из текущего SQL-запроса это emily
).
Так откуда взялась эта неправильная величина 9?Он поступает из этой строки ввода:
+-------------------+-----------------+--------------+-----------+-------------+
| customer_email_id | query_result_id | customer_id | author | email_nb |
+-------------------+-----------------+--------------+-----------+-------------+
| 14 | 104 | 12 | emily | 9
... поэтому он связан с query_result_id= 104
, что само по себе определено здесь:
+-----------------------------+------------+--------------+-----------
| query_result_id | query_id | author | datecol
+-----------------------------+------------+--------------+-----------
| 104 | 4 | emily | 120
... так что это с query_id = 4
!Но, как я уже сказал при определении цели, я искал что-то, связанное с query_id = 2
, поэтому я не должен получить 9
, а значение 1
!
Вот скрипка для тестированияВаше решение: https://www.db -fiddle.com / f / nGVFhr3xMwKk9CDw6N6FWc / 13
Я пробовал подзапросы, пробовал внутренние объединения ... но ничего не работает.