我有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));
有很多方法可以实现这一目标 -
以下是一种可能的方法,在一个子查询上使用inner join
检索每个帐户的最低余额值,以便加入可以从其帐户&amp;的主表中产生相应的记录;余额字段匹配由子查询计算的。
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
子句的记录,因此为每个帐户返回。