mysql获取最大日期的金额值

时间:2016-03-16 18:46:28

标签: mysql

我有这样的表A:

mydate       kodetb   amount
-----------------------------
2016-03-10   203      600
2016-03-11   203      100
2016-03-11   200      110

我有这样的表B

kodetb  service  
---------------
200     ok
203     not ok

我想显示如下结果:

kodetb   mydate     amount    service
--------------------------------------
200     2016-03-11  110       ok
203     2016-03-10  100       not ok

显示第二行结果100,因为它具有最新/最大日期

请帮助

4 个答案:

答案 0 :(得分:0)

以下查询工作正常。我已经在我的本地进行了测试,它提供了所需的输出。

SELECT tableA.kodetb,mydate,amount,service
FROM tableA, tableB
WHERE tableA.kodetb = tableB.kodetb
GROUP BY tableA.kodetb
HAVING MAX(mydate); 

在您的表数据中,也不需要WHERE条件。但是,如果表中也存在非匹配数据,则需要匹配数据。

答案 1 :(得分:0)

您可以使用 JOIN NOT EXISTS

<强>查询

select t1.kodetb, t1.mydate, t1.amount, t2.service
from tableA t1
join tableB t2
on t1.kodetb = t2.kodetb
where not exists(
    select 1 from  tableA t
    where t.kodetb = t1.kodetb
    and t.mydate > t1.mydate
)
order by t1.kodetb;

<强> SQL Fiddle demo

答案 2 :(得分:0)

您可以使用相关的子查询来执行此操作,但这些都是非常低效的。

这种方式适用于连接,您必须使用表别名来标识没有更大值的记录(这是left outer在这里所做的事情)。如果c.mydate是最大值,这个技巧会为你提供NULL

SELECT a.kodetb, a.mydate, a.amount, b.service
FROM tableA a INNER JOIN tableB b ON a.kodetb = b.kodetb
LEFT OUTER JOIN tableA c ON c.kodetb = a.kodetb AND c.mydate > a.mydate
WHERE c.mydate IS NULL

这是一个显示结果的小提琴:

http://sqlfiddle.com/#!9/3faee/16

这是一个棘手的查询,因为当你使用&#34;聚合&#34;比如MAX(或SUMAVG或其他),您需要GROUP BY选择中的所有其他列。因此,如果您SELECT MAX(xdate), name, service FROM table收到错误,因为xdate是&#34;聚合&#34;并且您没有group bynameservice

答案 3 :(得分:-1)

这应该可以解决问题:

select tablea.kodetb, mydate, amount, tableb.service 
from tablea 
inner join tableb on tablea.kodetb = tableb.kodetb 
order by mydate desc