Mysql Groupby和Orderby问题

Mysql Groupby和Orderby问题,mysql,group-by,sql-order-by,Mysql,Group By,Sql Order By,这是我的数据结构 当我尝试这个sql时 select rec_id, customer_id, dc_number, balance from payments where customer_id='IHS050018' group by dc_number order by rec_id desc; 某处出了点问题,idk 我需要 rec_id customer_id dc_number balance 2 IHS050018 DC3 -1

这是我的数据结构

当我尝试这个sql时

select rec_id, customer_id, dc_number, balance
from payments
where customer_id='IHS050018'
group by dc_number
order by rec_id desc;
某处出了点问题,idk

我需要

rec_id  customer_id   dc_number   balance

2        IHS050018      DC3        -1
3        IHS050018      52         600 

我想要客户最近的余额,以及相应的dc_编号


Thanx

顺序在组之前:

select rec_id, customer_id, dc_number, balance
from payments
where customer_id='IHS050018'
order by rec_id desc
group by dc_number

我认为在SQL中,如果没有像这样的窗口函数,就没有一个好方法可以做到这一点。您可能必须在代码中迭代数据集,并以这种方式获得最近的余额。

基本上有两种方法可以获得此结果

select p.rec_id, p.customer_id, p.dc_number, p.balance
from payments p
where p.rec_id IN (
    select s.rec_id
    from payments s
    where s.customer_id='IHS050018' and s.dc_number = p.dc_number
    order by s.rec_id desc
    limit 1);
另外,如果你想得到每个客户的最后余额,你可以这样做

select p.rec_id, p.customer_id, p.dc_number, p.balance
from payments p
where p.rec_id IN (
    select s.rec_id
    from payments s
    where s.customer_id=p.customer_id and s.dc_number = p.dc_number
    order by s.rec_id desc
    limit 1);
<> P. >我认为另一种方法是利用DeC选择有序的事实,极限1等于用适当的组选择Max RexIID,全文如下:

select p.rec_id, p.customer_id, p.dc_number, p.balance
from payments p
where p.rec_id IN (
    select max(s.rec_id)
    from payments s
    group by s.customer_id, s.dc_number
    );
如果您想要每个客户的最后余额,这应该更快,因为max通常比较便宜,然后使用索引进行排序,它可能是相同的

同样,当这样编写子查询时,子查询是不相关的,它不需要为外部查询的每一行运行,这意味着它将只运行一次,并且整个查询可以作为连接重写

还请注意,将其作为相关查询写入可能是有益的,方法是根据外部查询的选择性,在内部查询中添加其中s.customer\u id=p.customer\u id和s.dc\u number=p.dc\u number


如果只查找一行或几行的最后余额,这可能会提高性能。

您认为应该发生什么?您是在寻找总余额吗?我想要客户最近的余额以及相应的dc_编号?之前没有,也没有关系:如果您有group by blance、rec_id、,customer_id将以任意方式选择SQL标准实际上规定select中的任何列都应位于group by中,或应用聚合函数;mysql扩展了这个标准,但它并不是非常有用,更重要的是,你简直是太棒了,thanx为了节省我的大部分时间,thanQI刚刚做了一个编辑,因为我错过了一个条件,即你想要最后一个余额与dc_数有关。之前的版本给出了每个客户的最后一个余额