【问题标题】:SQL List data from table dependant on data from another tableSQL 根据另一个表中的数据列出表中的数据
【发布时间】:2017-11-17 21:50:30
【问题描述】:

我正在为一位希望按即将发生的活动对他的数据进行排序的客户编写一个 CMS。

有一个名为 customers 的表,其中包含由 cust_id 列标识的所有客户。

还有一个名为activities 的表,其中有一个cust_id 列用于将其与客户配对,还有一个date_last_done 字段用于指定任务完成的时间。客户可以记录许多活动。

我想获取最近 (date_last_donedesc) 活动在 11 个月前完成的所有客户。

这是我的尝试:

SELECT
    *
FROM
    customers
INNER JOIN
    activities
ON
    activities.cust_id = customers.cust_id
WHERE
    (SELECT
        date_last_done
    FROM
        activities
    WHERE
        cust_id = ???
    ORDER BY
        date_last_done
    DESC)
    < date() - 11months

我将如何编辑我的查询来做到这一点?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    使用子查询加入customers 表,该子查询返回具有符合条件的活动的客户。

    SELECT c.*
    FROM customers AS c
    JOIN (SELECT cust_id
          FROM activities
          GROUP BY cust_id
          HAVING MAX(date_last_done) < DATE_SUB(NOW(), INTERVAL 11 MONTH)) AS a
    ON c.cust_id = a.cust_id
    

    【讨论】:

    • 很棒的答案 - 我以前没有使用过这个逻辑。在AS a ON c.cust_id 之前缺少括号存在问题。另外,声明FUNCTION db.MAX() 不存在时抛出错误?
    • 修复了丢失的括号,但不确定错误。确保MAX 后面没有空格。
    • 正确。 PHPMyAdmin 格式化了 SQL 并在那里添加了一个新行。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2015-12-02
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多