查询以获取最近日期的记录

时间:2017-05-04 06:28:16

标签: java mysql sql

我想根据最近的日期(最新日期)从DB获取记录。 我在下面写了一个查询,但是没有工作并显示错误:

  

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; 

3 个答案:

答案 0 :(得分: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没有多大意义。谓词意味着你只有一个组,而你#&# 39;知道它的价值:在这种情况下,80822. GROUP BY的整个目的是识别群体;如果你已经知道群体,你就不需要它。)

答案 1 :(得分:0)

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

之类的顺序

答案 2 :(得分:0)

你可以尝试:

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)