我如何获取所有客户最近一次交易的详细信息?

时间:2021-07-02 07:36:12

标签: sql ms-access

以下是示例表

SrNo, Date, TypeOfTran, CustID, AmtDue, AmtRec
1, 01-Jan-2021, 0,      A,       102,       0
2, 01-Jan-2021, 0,      A,       120,       0
1, 02-Jan-2021, 0,      D,       140,       0
1, 02-Jan-2021, 1,      D,         0,     176
2, 02-Jan-2021, 1,      D,         0,     188
1, 05-Jan-2021, 0,      P,         0,     196
2, 05-Jan-2021, 1,      L,         0,     134

*TypeOfTran [到期 = 0,收据 = 1]

SrNo 在日期更改和 TyepOTran 更改时重置

我想创建一个查询来返回每个客户的最后一条记录。

客户可以在一天中的任意时间进行购买和/或付款。

我阅读了 how do I query sql for a latest record date for each user 查询中给出的答案,但这是基于日期这一条件。

我正在使用 MS Access

谢谢。

Please see attached image of above table

2 个答案:

答案 0 :(得分:0)

您需要另一个条件来匹配最后一个 SrNo。试试下面的查询。这里的 tDate 是您的日期列。由于 date 是保留关键字,因此我使用 tDate 作为列名。

select t.*
from Table1 as t
inner join (
    select CustID, max(tdate) as MaxDate, max(SrNo) as MaxSr
    from Table1
    group by CustID
) as t2 on t.CustID = t2.CustID and t.tdate = t2.MaxDate and t.SrNo=t2.MaxSr

enter image description here

答案 1 :(得分:0)

SQL 表表示无序 集。所以你需要第二列来获得每天的最后一列。如果日期列有时间组件,这将得到解决,但情况似乎并非如此。让我假设 SrNo 在一天内提供订单。

如果是这样:

select t.*
from t
where t.date = (select max(t2.date) 
                from t as t2 
                where t2.custId = t.custId
               ) and
      t.SrNo = (select max(t2.SrNo) 
                from t as t2 
                where t2.custId = t.custId and t2.date = t.date
               ) ;

第一个条件获取最后日期的值。第二个获取日期的最后一个值,假设 SrNo 提供该排序。

为了性能,您需要在 (custId, date, srNo) 上建立索引。

相关问题