我正在尝试运行一个返回不同AddressID的查询。
为每个addressid返回的行应该是具有最新readdate的行。
我还想从(非聚合)列phonenumber、somecode和country中返回给定记录的值。
这里也有类似的问题,但似乎没有什么适合我的确切情况。我尝试了不同的子查询,并使其他列聚合,但我似乎无法得到我想要的结果。
说出查询的基础,如:
select cr.AddressID, cr.ReadDate, in.PhoneNumber, in.SomeCode, in.Country
from CustomerReadings cr, in.CustomerInfo
where cr.AddressID = in.AddressID
例如,如果我有一个如下所示的表:
AddressID ReadDate PhoneNumber SomeCode Country
1005 01/01/1997 5556565 GHS Canada
1005 05/06/2006 5556753 ROT USA
1005 08/12/2018 5552345 JKR USA
2007 02/05/2012 5558746 MSC Canada
2007 12/07/2018 5552345 RRE France
4000 03/01/1999 5552345 RRE France
4000 09/05/2007 5551243 MSR USA
我希望查询结果如下所示:
AddressID ReadDate PhoneNumber SomeCode Country
1005 08/12/2018 5552345 JKR USA
2007 12/07/2018 5552345 RRE France
4000 09/05/2007 5551243 MSR USA
如果有什么不清楚的,请让我知道,我会相应地更新我的问题。
在回答示例中使用的1个表的情况下,代码是有效的。
但是当我带进另一个表时,我不再只得到一个不同的addressid,例如:
select (or select distinct)
cr.AddressID, cr.ReadDate, in.PhoneNumber, in.SomeCode, in.Country
from
CustomerReadings cr,
CustomerInfo in
where
cr.AddressID = in.AddressID
and cr.ReadDate =
(select max(cr2.ReadDate)
from CustomerReadings cr2
where cr2.AddressID = cr.AddressID)
order by
2 desc,
1;
2条答案
按热度按时间wztqucjr1#
应该有非常相似的问题。我使用相关子查询:
wkftcu5l2#
需要关联子查询:
如果您使用的是最新版本的
MySQL
,那么row_number()
会有帮助的:但是,如果readdate有关系,那么
row_number()
将不再有助于使用dense_rank()
相反。