使用SQL Server为我的NYSE表中的每个公司选择:
我已经用CURSOR完成了它并且正在研究WHILE LOOP但是这样做很多答案表明SET BASED LOGIC(连接等)可以实现这一点。但是,我不知道基于集合的逻辑如何从与其表中的MAX(BidPrice)和MIN(AskPrice)相同的行中的Contracts表返回MAX(TimePlaced)。
伪代码的道歉(它实际上比这复杂得多)和作为菜鸟 - 是一个更好/实用的解决方案,Web应用程序通过单独填充HTML输出表中的每个单元格查询???
答案 0 :(得分:1)
你有4张桌子,纽约证券交易所,合约,投标,要求。假设所有4个表都有一个Column CompanyId并且NYSE是主表(其他表中的任何一个companyid将在NYSE中),使用公用表表达式语法很容易。
;with Ct as (Select n.CompanyId, c.lastradeprice,
row_number() over (partition by n.companyid
order by tradedatetime desc) rw
From nyse n inner join contract c on c.companyid =n.companyid),
Bd as (Select n.CompanyId, max(bc.bidprice) bidprice
From nyse n inner join bids b on b.companyid =n.companyid
Group by n.companyid),
Ak as (Select n.CompanyId, min(a.askprice) AskPrice
From nyse n inner join asks a on a.companyid =n.companyid
Group by n.companyid)
Select n.companyId, ct.lasttradeprice, bd.tradeprice, ak.AskPrice
From nyse n
Left join ct on ct.companyid = n.companyId and rw=1
Left join bd on bd.companyid = n.companyid
Left join ak on ak.companyid = n.companyid
合同上的加入有一个额外的条件,因为我们想要最新的价格,而不是最大价格或最小价格,所以结果必须分解并订购someho,这就是分区和订单所做的。 / p>
上述查询还包含以下假设:当需要nyse中的条目时,其他表中的条目是可选的。如果其他表中的条目是必需的,则可以进一步简化查询。