2017-05-04 87 views
1

我想根据最近日期(最近日期)从DB中获取记录。 我已经写一个查询向下低于该不工作,并显示错误:查询获取最近日期的记录

11时55分05秒中选择名字,姓氏从mb_orderhistory其中 EVENTTYPE =“PROPOSED_ITEM_EDIT”和订单ID = 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; 
+0

你用哪个数据类型为“updatedDate”? @Akash –

+0

数据类型是'date' – Akash

+0

你可以尝试使用'ORDER BY'和'LIMIT'。另一种选择是在'SELECT'子句中用'MAX'编写子查询。 – mm759

回答

1

中不能使用聚合(又名组)功能—像MAX —一个WHERE子句。这是因为WHERE子句是针对每一个可能的行进行评估的,而集合函数的值只在看到所有匹配的行之后才被定义。

见MySQL的docs on SELECT syntax,并且具体地:

在WHERE表达式,则可以使用任何的那MySQL支持,除了集合体(摘要)功能的功能和操作符。

相反,你应该只由updateDate顺序(按降序排列,使得真实输出的第一行是最大的),并使用LIMIT只得到一个行:

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

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

+0

'选择名字,姓氏 \t FROM mb_orderhistory WHERE updatedDate IN( SELECT MAX(updatedDate) FROM mb_orderhistory WHERE订单ID = 80822和EVENTTYPE = “PROPOSED_ITEM_EDIT” );'对我来说工作得很好 – Akash

+0

使用这样的子查询可以工作,但效率可能会降低。您可以使用EXPLAIN尝试弄清楚它是否是,尽管阅读解释的输出并不容易。 – yshavit

+0

感谢澄清事情。从mb_orderhistory – Akash

0

在SQL Server中,你可以通过像select top 1 firstname,lastname from <table_name> where <condition> order by updateddate desc

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) 
0
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; 

推荐推荐速递该应用程序可能对您有帮助! TX。