选择最新日期的帐号

曼斯

我几天来一直在尝试解决这个问题。我有一个名为Stat的表,具有以下简化的结构和示例数据:

Customer    BankID  AccNumb Type                Date        Amount    AccType

Customer 1  Boa     5       Account Statement   2015-01-01  10000,00    Eur
Customer 1  CS      10      Account Statement   2015-04-04  22000,00    Eur
Customer 2  Sa      15      Account Statement   2015-03-13  3000,00     Eur
Customer 2  Sa      40      Account Statement   2015-04-24  1000,00     Eur
Customer 2  Sa      15      Sale Advice         2015-04-16  400,00      Eur
Customer 2  Sa      15      Account Statement   2015-12-24  50,00       Usd
Customer 2  Boa     20      Sale Advice         2015-05-15  6000,00     Eur
Customer 3  Cu      25      Account Statement   2015-11-27  81000,00    Eur
Customer 3  Cu      30      Sale Advice         2015-11-27  3000,00     Usd
Customer 3  Pop     30      Account Statement   2015-11-27  12000,00    Eur

我要尝试的是选择指定了最新日期的AccountNumber。客户在各个银行中也可以具有不同的帐号,因此也应按BankID和客户分组。

我走了这么远:

SELECT AccNumb, Customer, BankID,
(SELECT TOP 1 Amount FROM Stat 
        WHERE AccNumb = y.AccNumb AND Customer = y.Customer AND 
              BankID = y.BankID AND Type = 'Account Statement' AND 
              Date = MAX(y.Date) GROUP BY Amount) Amount
FROM Stat y
    GROUP BY AccNumb, Customer, BankID
        ORDER BY Customer, AccNumb

而且它工作正常,问题是我还应该添加列AccType和Date我设法通过另外2个子选择来做到这一点(查询需要很长时间,但它可以工作)。

但是现在我有一个问题,在“客户”(或“日期”)列中也有NULL值。现在,如果它们是最新日期,则仍应显示这些“ NULL”客户的帐号。我还尝试通过单独加入表来做同样的事情,但没有成功。

SELECT x.AccNumber, x.Customer, x.BankID, x.Date, y.Amount, y.AccType
FROM Stat y RIGHT JOIN
    (SELECT AccNumber, Customer, BankID, MAX(Date) Date  FROM Stat 
        GROUP BY AccNumber, Customer, BankID) x 
 ON x.AccNumber = y.AccNumber AND 
    x.Customer = y.Customer AND 
    x.BankID = y.BankID AND 
    x.Date = y.Date
ORDER BY y.Customer, y.AccNumber        

但是现在'NULL'客户在Amount,Date和AccType列中只有NULL值,这是不正确的。

输出应该是这样的

AccNumb     Customer        BankID  Amount  Date        AccType

111111111   a               Boa     1234.40 31.06.2014  Eur
222222222   NULL            Boa     5678.40 31.04.2014  Eur
333333333   b               Boa     0.00    25.02.2014  Eur
444444444   NULL            Boa     9101.40 23.04.2015  Eur
555555555   NULL            Boa     1213.40 31.02.2014  Usd
A66666666   c               Sa      NULL    31.02.2014  Eur
777777777   c               Sa      1415.00 31.12.2014  Eur
888888888   c               Boa     1617.40 31.12.2014  Usd
999999999   f               Pop     5678.64 31.10.2014  Eur

提前致谢。

戈登·利诺夫

只要使用row_number(),如果我理解正确:

select s.*
from (select s.*,
             row_number() over (partition by customer, bankId order by date desc) as seqnum
      from stat s
     ) s
where seqnum = 1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从加入中选择最新日期

来自分类Dev

MySQL选择最新日期-单表

来自分类Dev

MySQL:如何选择某个日期之前的最新日期的记录

来自分类Dev

获取最新日期

来自分类Dev

查询最新日期

来自分类Dev

查找最新日期

来自分类Dev

最新日期字段

来自分类Dev

SQL-选择最新日期的“子”记录

来自分类Dev

SQL选择最新日期的记录并由此决定

来自分类Dev

如何在MySql中选择最新日期?

来自分类Dev

如何按号码为每个组选择最新日期?

来自分类Dev

sql:如果状态不为零,如何选择最新日期

来自分类Dev

SQL-按每个记录的最新日期选择记录

来自分类Dev

如何从pandas df的多个列中选择最新日期?

来自分类Dev

如何从pandas df的多个列中选择最新日期?

来自分类Dev

按最新日期每月选择1个不同的记录

来自分类Dev

如何选择具有最新日期和时间的行

来自分类Dev

在一组结果中明确选择最新日期

来自分类Dev

MS Access查询仅选择最新日期

来自分类Dev

如何在MySql中选择今天之前的最新日期?

来自分类Dev

SQL 选择具有最新日期的属性列

来自分类Dev

查询最新日期记录

来自分类Dev

显示datagridview的最新日期

来自分类Dev

排除最新日期的熊猫

来自分类Dev

检索最新日期的oracle

来自分类Dev

SQL查询的最新日期

来自分类Dev

选择每个类别的所有项目,但仅选择每个类别的最新日期

来自分类Dev

在JPA中选择具有1个条件的每个用户的最新日期的行

来自分类Dev

如何对行进行分组并选择要在数据表中显示的最新日期