MySQL извлекает самые последние записи без использования поля автоинкремента в соединении - PullRequest
0 голосов
/ 03 октября 2018

Я хочу получить самую последнюю строку из нескольких записей в таблицу, используя объединение в MySql

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

У меня есть 2 таблицы: 1-й - это купон, а 2-й - это coupon_data

В таблице-купоне указан полный код купона, а в coupon_data указаны данные о купоне с датой его погашения идругая информация В этом случае купон будет сканироваться несколько раз, поэтому его будет иметь несколько дат сканирования

Как это

купон

+----------+--------------+
| coupon_id | coupon_code |
+----------+--------------+
|        1 | coupon1      |
|        2 | coupon2      |
|        3 | coupon3      |
+----------+--------------+

coupon_data

+----+------------+-------------+
| id | scan_date  | coupon_code |
+----+------------+-------------+
|  1 | 2018-04-18 | coupon1     |
|  2 | 2018-04-20 | coupon2     |
|  3 | 2018-04-22 | coupon2     |
|  4 | 2018-04-25 | coupon1     |
|  5 | 2018-04-27 | coupon1     |
|  6 | 2018-04-28 | coupon3     |
+----+------------+-------------+   

Теперь мне нужен самый последний купон сцены с его scan_date

Я пытался получить данные по этому запросу

SELECT *
FROM coupon c
left JOIN (
SELECT MAX(id) max_id, scan_date,coupon_code
FROM coupon_data
GROUP BY coupon_code
) c_max ON (c_max.coupon_code = c.coupon_code)
left JOIN coupon_data cd ON (cd.coupon_code = c_max.coupon_code)

Но не повезло.Моя цель - получить данные, подобные этим.

+-------------+------------+
| coupon_code | scan_date  |
+-------------+------------+
| coupon1     | 2018-04-27 |
| coupon2     | 2018-04-22 |
| coupon3     | 2018-04-28 |
+-------------+------------+

Любой ответ приветствуется.

1 Ответ

0 голосов
/ 03 октября 2018

Если вы действительно хотите получить столько данных, а ваша таблица содержит те же данные, которые вы упомянули в вопросе, тогда вам не нужен подзапрос и объединения.

Попробуйте что-то вроде

   SELECT c.coupon_code, cd.dt FROM coupon c INNER JOIN (
     SELECT MAX(scan_date) AS dt , coupon_code AS cod FROM  
     coupon_data GROUP BY coupon_code 
   ) cd 
   ON cd.cod = c.coupon_code

Это вернет вам ожидаемый результат.

Попробуйте это Демо

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