首页 > 解决方案 > 获取最小值及其发生的日期

问题描述

我有 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));

标签: sqlms-access

解决方案


有很多方法可以实现这一点 -

下面是一种可能的方法,使用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子句,因此为每个帐户返回。


推荐阅读