mysql - 如何编写sql查询来获取每个成员的最后一笔交易?

标签 mysql sql sql-server sql-server-2008

我的查询是这样的:

SELECT
    FOB_Id, MM_Id, CONVERT(varchar(25),FOB_Date,103), FOB_Balance, FOB_B_CR_DR  
FROM
    FO_Opening_Balance
WHERE
    MM_Id IN (1,597)
        AND month(FOB_Date)=1 
        AND YEAR(fob_date) = 2014
GROUP BY
    MM_Id, FOB_Id, FOB_Date, FOB_Balance, FOB_B_CR_DR  
ORDER BY
    FOB_Date desc, FOB_Id DESC

会显示如下:

FOB_Id  | MM_Id | FOB_Date  |  Balance | cr/dr
-------------------------------------------------
625773  |  1    |31/01/2014 |   247.32 | Cr        
624391  | 597   |31/01/2014 |  1663.42 | Dr        
623999  |  1    |31/01/2014 |   447.32 | Cr        
622000  | 597   |31/01/2014 |  1551.42 | Dr        
621877  |  1    |31/01/2014 |   559.32 | Cr        
621473  |  1    |31/01/2014 |   865.32 | Cr        
620907  |  1    |24/01/2014 |   893.32 | Cr        
615844  | 597   |06/01/2014 |  1439.42 | Dr

但是我只想显示成员(member)id的最后一笔交易,如果我在select语句中给出top 1它只会显示一行,这里我给了两个成员(member)id 1和597,它应该显示只显示上表的前两行,这样如果给了很多成员(member)id,应该只显示该成员(member)交易,请帮助。

最佳答案

根据查询语法,我假设您正在使用 SQL Server。如果你想要最后一笔交易,你可以使用row_number():

select FOB_Id,  MM_Id, dte, FOB_Balance, FOB_B_CR_DR
from (select FOB_Id,  MM_Id , convert(varchar(25), FOB_Date,103) as dte, FOB_Balance, FOB_B_CR_DR, FOB_Date,
             row_number() over (partition by mm_id order by fob_date desc) as seqnum
      from FO_Opening_Balance
      where MM_Id in (1,597) and
            month(FOB_Date) = 1 and YEAR(fob_date) = 2014
     ) t
where seqnum = 1
order by FOB_Date desc, FOB_Id desc;

关于mysql - 如何编写sql查询来获取每个成员的最后一笔交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22376970/

相关文章:

mysql - 有没有办法检查值是否为零并在 mysql 中执行此操作或执行此操作

mysql - #1093 - 您不能在 FROM 子句中指定要更新的目标表

mysql - 更新 MySQL 不正确的语法

sql - 按顺序数字分组

sql-server - 在 SQL Server 中查找树的叶节点

mysql - 我怎样才能简化这个mysql语句?

java - -bash : syntax error near unexpected token `('

php - 自动生成 $_POST 变量

MySQL:从组中选择最后一个,但有条件

sql - 如何从 SQL Server 中的现有表创建类型?