SQL共享计算

时间:2012-10-19 03:56:13

标签: sql relational-database relational-algebra

我有一个包含以下架构的数据库:

fund(fundID, fundName,totalShares) 
price(fundID,priceDate,price) 
trans(sin,fundID,transDate,shares) 
customer(sin,name,address,phone)
rep(repid,repName) 
customerRep(sin,repId)

我的任务是找到每天交易后持有特定基金("能源")股票的独特客户。我不完全确定trans代表什么,即购买或购买的股票。我正在寻找提示而不是答案,如果可以,请使用示例代码,谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个

SELECT c.sin, c.name
FROM customer c 
INNER JOIN trans t ON t.sin = c.sin 
WHERE t.funcID = XXXX 
AND t.transDate = '2012-10-19' 

如果你想要文字匹配,即“能量”

SELECT c.sin, c.name
FROM customer c 
INNER JOIN trans t ON t.sin = c.sin 
INNER JOIN fund f ON f.fundID = t.fundID
WHERE f.fundName = 'Energy' 
AND t.transDate = '2012-10-19' 

编辑:

从您的回复中,交易表(反式)可以包含同一日期的大量记录,用于购买/出售该基金的相同fundID。

在这种情况下,您需要对这些进行总结。子查询可以做到这一点。我相信以下内容可以为您提供sin,fundID,transDate和remaining_shares的唯一数量。通过这种方式,您可以修剪所有交易,只保留正面交易,然后您可以与客户一起加入。

SELECT t.sin, t.fundID, t.transDate, SUM(t.shares) AS remaining_shares 
FROM trans t 
WHERE SUM(shares) > 0 
GROUP BY t.sin, t.fundID

HTH

答案 1 :(得分:0)

交易可以是很多东西。购买,销售,公司活动,应计收入,承担,起飞。

看起来您需要查看表trans才能开始。

我不认为这是正确的网站,了解什么交易(除非你在说数据库),但编程方面可以帮助