我有一个mysql表,其中包含ID
,UniqName
,Category
,EntDate
,Qty
。
当"类别"中的Qty
总和超过设定的限制时,我必须找到每个UniqName
的EntDate
。
我是SQL的初学者,被这个报告要求难住了。
计算运行总和可能很复杂。 一些数据库提供直接支持。 以下是MySQL中使用相关子查询的方法:
select t.*
from (select t.*,
(select sum(t2.qty)
from t t2
where t2.UniqName = t.UniqName and
t2.EntDate <= t.EntDate
) as cumsum
from t
) t
where cumsum >= YOURLIMIT and cumsum - qty < YOURLIMIT;
这甚至可以具有合理的性能,如果您有索引 t(UniqName, EntDate, qty)
.
此查询假定每个UniqName
不重复EntDate
,并且qty
不为 NULL。 如果qty
可以为零或负数,则可能会显示多行。