mysql获取最大日期的金额值

mysql获取最大日期的金额值,mysql,Mysql,我有一张这样的桌子: mydate kodetb amount ----------------------------- 2016-03-10 203 600 2016-03-11 203 100 2016-03-11 200 110 kodetb mydate amount service -------------------------------------- 200 2016-03-11 110

我有一张这样的桌子:

mydate       kodetb   amount
-----------------------------
2016-03-10   203      600
2016-03-11   203      100
2016-03-11   200      110
kodetb   mydate     amount    service
--------------------------------------
200     2016-03-11  110       ok
203     2016-03-10  100       not ok
我有像这样的B桌

kodetb  service  
---------------
200     ok
203     not ok
我想这样显示结果:

mydate       kodetb   amount
-----------------------------
2016-03-10   203      600
2016-03-11   203      100
2016-03-11   200      110
kodetb   mydate     amount    service
--------------------------------------
200     2016-03-11  110       ok
203     2016-03-10  100       not ok
其中显示第二行结果100,因为它具有最新/最大日期


请帮助下面的查询工作正常。我已经在我的本地计算机上进行了测试,它提供了所需的输出

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

在不需要条件的表数据中。但是,当表中还存在不匹配的数据时,匹配数据需要它。

这应该可以做到:

select tablea.kodetb, mydate, amount, tableb.service 
from tablea 
inner join tableb on tablea.kodetb = tableb.kodetb 
order by mydate desc
您可以使用连接不存在

查询

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;

您可以通过相关子查询来实现这一点,但这些子查询效率非常低

这种方法适用于联接,您必须使用表别名来标识没有更大值的记录(这就是
左侧外部的作用)。如果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
下面是一把小提琴,显示了结果:


这是一个棘手的查询,因为当您使用诸如
MAX
(或
SUM
AVG
或其他任何内容)之类的“聚合”时,您必须
按所选列中的所有其他列进行分组。因此,如果
从表
中选择MAX(xdate)、name、service,您会得到一个错误,因为
xdate
是一个“聚合”,并且您没有
name
service

分组,这是不正确的,它显示了3个结果,应该只显示了2个不正确的结果,它不显示最新的交易日期。它显示的是最新的交易日期。我已经在我的本地机器上进行了测试,您可以说明它不显示最新日期的原因吗?您必须让您的
选择
语句中聚合函数中未使用的所有
列,以便按照您在结果中建议的方式执行此操作,对于
kodetb=203
date应该是
2016-03-11
right??这是可行的,但相关子查询的效率不如联接。我更喜欢这种东西。