0

我有 2 张桌子:

sms_send有以下列: created_at, order_id, sms_id, mobile, msg

sms_msg有以下列id, short_desc

sms_id对应于idsms_msg

sms_send可以有多个相同的行order_id,但sms_id每个记录可能(不)相同。

sms_msg将只有唯一id的 s。

我想加入这两个表(仅在 2013 年 7 月 1 日之后创建的行,使用以下信息:

对于 each order_id,从另一个表中获取sms_id并连接short_desc,但只返回最近的记录。

order_id因此,我将拥有每个相关联的最新记录short_desc

这是我的尝试:

SELECT
    *,
    `sms_msg`.`short_desc`
FROM 
    `sms_send`
INNER JOIN
    `sms_msg`
ON
    `sms_send`.`sms_id` = `sms_msg`.`id`
WHERE
    `created_at` > '2013-07-01 00:00:00'
HAVING 
    `created_at` = (SELECT `created_at` FROM `sms_msg` GROUP BY `id` HAVING `created_at` = MAX(`created_at`))

这不起作用,子查询返回多行。

为什么这样?我该如何解决?

4

1 回答 1

1

如果created_at对于给定的 order_id 是唯一的,并且是 DATETIME 或 TIMESTAMP 类型,或者是规范格式的字符格式,那么这将返回指定的结果集。

SELECT s.created_at
     , s.order_id
     , s.sms_id
     , s.mobile
     , s.msg
     , t.short_desc
  FROM (
         SELECT m.order_id
              , MAX(m.created_at) AS latest_created_at
           FROM sms_send m
          WHERE m.created_at >= '2013=07-01' 
          GROUP
             BY m.order_id
       ) l
  JOIN sms_send s
    ON s.order_id = l.order_id
   AND s.created_at = l.latest_created_at
  JOIN sms_msg t
    ON t.id = s.sms_id
于 2013-08-09T06:14:07.597 回答