我有一个交易级别表。我试图将它合并到一个acct级别表。因此,我汇总了许多领域。但是,对于基于文本的字段,我想要每个帐户的第一个和最后一个值。
在Access中有一个LAST功能。我试着在这里复制这个函数的逻辑:
SELECT
ACCT
,(SELECT TOP 1 PaidDte FROM TRANS_TBL
WHERE MSTR_TRANS_TYPE = 'Paid' and ACCT=ACCT ORDER BY DTE DESC) as 'LastPaid'
FROM TRANS_TBL
GROUP BY ACCT
所有这一切都是返回每个acct记录中整个表的最后一个值,而不是每个不同帐户的子查询的最后一个值。
任何人对如何做到这一点都有任何想法?我以前做过,我不记得它是如何工作的。
谢谢!
答案 0 :(得分:1)
你可以这样做,如果你提供更多你的架构,它可能会更加精炼:
select acct -- select whatever you need from the min and max records for each acct
from trans_table t
inner join (
select acct
min(Dte) as minDte,
max(Dte) as maxDte)
from TRANS_TBL -- i'm assuming DTE stands for date (don't use abbreviations and then not explain your schema :p ) this would be better if you had an auto id in case of exactly overlapping dates.
GROUP BY acct
) minMaxDates on t.acct = minMaxDates.acct
and (
t.Dte = minMaxDates.minDte OR
t.Dte = minMapDte.maxDte
)