获取最小值及其发生的日期

时间:2019-05-02 14:53:23

标签: sql ms-access

我有3列

DATE|END OF DAY BALANCE|ACCOUNT

我想获得小于零的最小余额以及发生这种情况的日期。

以下查询将带回所有日期:

SELECT DISTINCT
       END_OF_DAY_BALANCE.Date,
       MIN(END_OF_DAY_BALANCE.[END OF DAY BALANCE]) AS [MinOfEND OF DAY BALANCE],
       END_OF_DAY_BALANCE.[ACCOUNT]
FROM END_OF_DAY_BALANCE
GROUP BY END_OF_DAY_BALANCE.Date,
         END_OF_DAY_BALANCE.[ACCOUNT]
HAVING(((MIN(END_OF_DAY_BALANCE.[END OF DAY BALANCE])) < 0));

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现-

以下是一种可能的方法,在子查询上使用inner join来检索每个帐户的最小余额值,这样联接就可以从主表中产生相应的记录,该记录的帐户和余额字段与子查询计算的结果匹配。

select t.*
from
    end_of_day_balance t inner join
    (
        select u.account, min(u.[end of day balance]) as mb
        from end_of_day_balance u
        where u.[end of day balance] < 0
        group by u.account
    ) v on
    t.account = v.account and t.[end of day balance] = v.mb

或者,您可以通过以下方式使用相关子查询:

select t.*
from end_of_day_balance t
where 
    t.[end of day balance] = 
    (
        select min(u.[end of day balance]) 
        from end_of_day_balance u 
        where u.account = t.account and u.[end of day balance] < 0
    )

在这里,为每条记录评估子查询,只有那些具有最小余额的记录才能验证where子句,因此为每个帐户返回该子查询。