【问题标题】:How to select the max aliased value in MySQL如何在 MySQL 中选择最大别名值
【发布时间】:2021-05-03 16:47:39
【问题描述】:

我对 mysql 还很陌生,这里有这个 SQL:

SELECT * , MAX(meeting_date) AS recent_meeting_date
FROM driver
INNER JOIN  meeting_attendee ON meeting_attendee.attendee_email = driver.driver_email
INNER JOIN  meeting ON meeting.meeting_id = meeting_attendee.meeting_id
    WHERE recent_meeting_date < UTC_TIMESTAMP
    GROUP BY driver_id
    ORDER BY driver_id;

我有一个driver 表,其中包含驱动程序详细信息和来自meeting 表的内部联接,其中列出了所有会议及其和meeting_attendee 表,其中列出了过去和将来参加会议的所有驱动程序。

我需要一个 sql 来显示尚未预订会议的所有司机的列表,这意味着他们最近的会议日期小于今天的日期并且不大于今天的日期。

这个 sql 没有运行,因为我们不能在 WHERE 子句中使用recent_meeting_date。如何修复 sql 以使其正常工作?

【问题讨论】:

  • 请添加几行样本数据和预期的结果。
  • 您的查询格式错误。它可能在 MySQL 5.7.4 或更早版本中运行,但即便如此,结果也是不可预测的。

标签: mysql groupwise-maximum


【解决方案1】:

您收到一个错误,因为您不能在 where 子句中使用别名引用。在查询中,您在 were 子句中引用 recent_meeting_date。要修复您的查询,您需要使用 HAVING 子句,您将能够解决您的问题。有关 WHERE 与 HAVING 的更多信息,请查看此stackoverflow

这是带有having子句的完整查询:

    SELECT * , MAX(meeting_date) AS recent_meeting_date
    FROM driver
    INNER JOIN  meeting_attendee ON meeting_attendee.attendee_email = driver.driver_email
    INNER JOIN  meeting ON meeting.meeting_id = meeting_attendee.meeting_id
    GROUP BY driver_id
    HAVING recent_meeting_date < UTC_TIMESTAMP
    ORDER BY driver_id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 2021-09-28
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多