mysql在join中不使用自动递增字段获取最近的记录

wnvonmuf  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(450)

我想在mysql中使用join将多个记录中最新的一行放到表中
我已经参考了stackoverflow和其他博客中的一些帖子,并试图修复我的案例,但我认为我的案例中还有其他一些问题。
我有两张表:第一张是优惠券,第二张是优惠券数据
在表中,优惠券包含所有优惠券代码,优惠券数据包含优惠券的详细信息及其兑换日期和其他信息。在这种情况下,优惠券将被多次扫描,因此其具有多次扫描日期
这样地
优惠券

+----------+--------------+
| 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 |
+-------------+------------+

如有回复,不胜感激。

aurhwmvo

aurhwmvo1#

如果您真的只需要这么多的数据,并且表中包含的数据与前面提到的相同,则不需要子查询和联接。
试试这样的

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

这将返回预期结果。
试试这个演示

相关问题