按查询选择组中列中的第一个和最后一个值

时间:2015-03-05 00:00:11

标签: sql

我有一个交易级别表。我试图将它合并到一个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记录中整个表的最后一个值,而不是每个不同帐户的子查询的最后一个值。

任何人对如何做到这一点都有任何想法?我以前做过,我不记得它是如何工作的。

谢谢!

1 个答案:

答案 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
    )