MySQL获取最新记录而不在连接中使用自动增量字段

标签 mysql join

我想使用 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/

相关文章:

mysql - SQL 查找日期时间列中不同日期的数量

mysql - mysql表的条件语句

mysql - 计算左连接中不同的特定右列的数量

mysql 用 sum 连接 3 个表给出了错误的结果

mysql - 如何合并连接表结果中的列?

mysql - SELECT AVG 仅显示一个结果

mysql - 用相同变量但来自不同行的值替换变量的值

php - 使用一个参数 pdo 查询两个表

Lion 上的 MySQL 5.5 不工作

MySQL 三路连接?