我想使用 MySql 中的联接将多条记录中的最新行获取到表中
我已经在堆栈溢出和其他博客中引用了一些帖子,并尝试修复我的案例,但我认为我的案例中还存在一些其他问题。
我有 2 个表:第一个是优惠券,第二个是 coupon_data
表中的优惠券包含所有优惠券代码,优惠券数据包含优惠券的详细信息及其兑换日期和其他信息 在这种情况下,优惠券将被扫描多次,因此它有多个扫描日期
像这样
优惠券
+----------+--------------+
| coupon_id | coupon_code |
+----------+--------------+
| 1 | coupon1 |
| 2 | coupon2 |
| 3 | coupon3 |
+----------+--------------+
优惠券数据
+----+------------+-------------+
| 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 |
+----+------------+-------------+
现在我需要最新的场景优惠券及其扫描日期
我尝试使用此查询获取数据
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 |
+-------------+------------+
任何回复都很感激。
最佳答案
如果您确实只需要这么多数据,并且您的表包含您提到的相同数据,那么您不需要子查询和联接。
尝试类似的事情
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
这将返回您预期的结果。
试试这个 Demo
关于MySQL获取最新记录而不在连接中使用自动增量字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52624281/