Sql 当数字顺序不可用时,计算两个数字的乘积

Sql 当数字顺序不可用时,计算两个数字的乘积,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个表@tbl_numshr,其中包含每个证券或股票的股票数量,以及@tbl_shrprice,其中包含 特定股票每天的价格 我想知道每天的市场份额是多少,但问题是,在@tbl_numshr表中,我没有每天的市场份额,但在 @tbl_shrprice我有每只股票的每日分录 表@ TBLYNUMSHR包含数据时,由于某些公司的行动,它改变了特定的股票,所以我想考虑旧的数据,直到新数据的新日期是不可用的。p> 在这种情况下请帮忙 declare @tbl_numshr table (id int

我有两个表@tbl_numshr,其中包含每个证券或股票的股票数量,以及@tbl_shrprice,其中包含 特定股票每天的价格

我想知道每天的市场份额是多少,但问题是,在@tbl_numshr表中,我没有每天的市场份额,但在 @tbl_shrprice我有每只股票的每日分录

表@ TBLYNUMSHR包含数据时,由于某些公司的行动,它改变了特定的股票,所以我想考虑旧的数据,直到新数据的新日期是不可用的。p> 在这种情况下请帮忙

declare @tbl_numshr table (id int identity ,sharecode int,  nosshare float , logdate datetime )


declare @tbl_shrprice table(id int identity ,sharecode int , shrprice float, logdate datetime)


insert into @tbl_numshr (sharecode,nosshare,logdate)
values(1000, 1200.5,'2016-02-10'),(1000, 2100,'2016-02-17'),(1000, 2500,'2016-12-23')

insert into @tbl_shrprice (sharecode,shrprice,logdate)
values(1000, 10,'2016-01-01') , (1000, 12,'2016-01-02'),(1000, 18,'2016-01-03')
使用,因为它允许与TOP1和ORDER BY关联的子查询:


请注意,关联应用对于大型数据集来说有很大的成本。我修改了价格的日期,使其在与股票数量相关时真正有意义。

研究使用日历表。我假设:从2月10日到2月17日,当它变为2100时,noshare等于1200.5,然后它等于2100,直到12月23日,当它再次变为2500?如果是这样,在2月10日之前等于0?不,它应该等于1200。5@TimBiegeleisen是的,有日历表,但如果我将日历表与tbl_numshr连接,它将只返回匹配的数据,我想生成完整的序列,我可以使用cte来完成,但是如果这个例子中只有一个开始和一个结束,则需要生成所有缺少的内容。是否使用日历表中的左连接?
insert into @tbl_shrprice (sharecode,shrprice,logdate)
values(1000, 10,'2016-02-10') , (1000, 12,'2016-02-20'),(1000, 18,'2016-02-25')

select p.*, np.nosshare, p.shrprice * np.nosshare as marketcap
from @tbl_shrprice p
cross apply (
    select top(1) *
    from @tbl_numshr n
    where n.sharecode = p.sharecode
    and n.logdate <= p.logdate
    order by logdate desc
) as np