以下是示例表
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
谢谢。
答案 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
答案 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)
上建立索引。