【问题标题】:Query to get record of most recent date查询获取最近日期的记录
【发布时间】:2017-10-02 04:35:02
【问题描述】:

我想根据最近的日期(最新日期)从数据库中获取记录。 我在下面写了一个查询,它不起作用并显示错误:

11:55:05 从 mb_orderhistory 中选择 firstName,lastName 其中 eventType="PROPOSED_ITEM_EDIT" 和 orderId=80822 和 MAX(updatedDate) GROUP BY orderId 错误代码:1111。无效使用 组函数 0.015 秒

这是我写的查询。

select firstName,lastName from mb_orderhistory where eventType="PROPOSED_ITEM_EDIT" and 
                orderId=80822 and MAX(updatedDate) GROUP BY orderId; 

【问题讨论】:

  • 您为“updatedDate”使用了哪种数据类型? @Akash
  • 数据类型为“日期”
  • 您可以尝试使用ORDER BYLIMIT。另一种选择是在SELECT - 子句中使用MAX 编写子查询。
  • 检查我的答案。它可能对你有帮助。 @Akash
  • 我没有使用ORDER BY 然后我也遇到了同样的错误。你能给我一些例子如何使用MAXSELECT吗?

标签: java mysql sql


【解决方案1】:

您不能在 WHERE 子句中使用聚合(也称为组)函数,例如 MAX。这是因为 WHERE 子句是针对每个可能的行进行评估的,而聚合函数的值仅在您看到所有匹配的行之后才定义。

请参阅 MySQL 的 docs on SELECT syntax,具体来说:

在 WHERE 表达式中,您可以使用 MySQL 支持的任何函数和运算符,聚合(汇总)函数除外。

相反,您应该只按 updateDate 排序(按降序排列,这样输出的第一行是最大的),并使用 LIMIT 只获取一行:

SELECT ... WHERE orderId=80822 ... ORDER BY updatedDate DESC LIMIT 1

(如果您在该列上也有一个相等谓词(orderId=80822),那么对该列的 GROUP BY 没有多大意义。谓词意味着您将只有一个组,并且您会知道它的值:在本例中为 80822。GROUP BY 的全部目的是识别组;如果您已经知道该组,则不需要它。)

【讨论】:

  • SELECT firstName,lastName FROM mb_orderhistory WHERE updatedDate IN ( SELECT MAX(updatedDate) FROM mb_orderhistory WHERE orderId =80822 and eventType="PROPOSED_ITEM_EDIT" ); 对我来说效果很好
  • 使用这样的子选择会起作用,但它的效率可能会降低。您可以使用 EXPLAIN 来尝试找出是否是,但阅读说明的输出并不容易。
  • select firstName,lastName from mb_orderhistory where eventType="PROPOSED_ITEM_EDIT" and orderId=80822 ORDER BY updatedDate DESC LIMIT 1; 效果很好
【解决方案2】:
Select firstName,lastName 
From mb_orderhistory 
where eventType="PROPOSED_ITEM_EDIT" 
   and orderId=80822 
   and updatedDate = (SELECT MAX(updatedDate) FROM mb_orderhistory)
GROUP BY orderId; 

这可能对你有帮助!发送。

【讨论】:

    【解决方案3】:

    你可以试试:

    select
       firstName
      ,lastName
    from mb_orderhistory
    where eventType = "PROPOSED_ITEM_EDIT"
      and orderId = 80822
      and updateDate = (select max(updateDate) from mb_orderhistory where eventType = "PROPOSED_ITEM_EDIT" and orderId = 80822)
    

    【讨论】:

      【解决方案4】:

      在 SQL Server 中,您可以使用 order by like select top 1 firstname,lastname from <table_name> where <condition> order by updateddate desc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        相关资源
        最近更新 更多