我有两张桌子(让我们称之为TradingWindows和VolumeData)。每一行TradingWindows都有一个startBin和endBin用于每个不同的股票。在VolumeData中,有stock stock,binIndex,volume。
我想通过执行以下操作来组合此信息:for-TradingWindows表中的每一行我想要总结所有的卷binIndex是> startBin和< endBin。 (想法是获得开始和结束之间的总量。)
现在,来自程序编程背景,这很容易(只需编写for-each循环)。我知道这在SQL中是可行的,但我是新的,并且想知道是否有更有效的方法来实现它。
谢谢!
答案 0 :(得分:5)
我正在对你的桌面结构做一些猜测,但我认为你正在寻找这样的东西:
Select VD.stock, Sum(volume)
From VolumeData VD
Inner Join TradingWindows TW On VD.stock = TW.stock
Where VD.binIndex Between TW.startBin And TW.endBin
Group By VD.stock
这会将您的VolumeData行与您的TradingWindow行(按库存)匹配,过滤掉不在您范围内的VolumeData行,并按库存将它们组合在一起。
编辑:这是一个非包容性版本(正如JNK所指出的,BETWEEN将包括startBin和endBin):
Select VD.stock, Sum(volume)
From VolumeData VD
Inner Join TradingWindows TW On VD.stock = TW.stock
Where VD.binIndex > TW.startBin And VD.binIndex < TW.endBin
Group By VD.stock