我有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));
答案 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
子句,因此为每个帐户返回该子查询。