如何编写一个SQL查询,该查询将为每个分析师选择特定日期(例如1/1/10)已知的每种股票的最新建议。例如,如果分析师有多个评级,但max(rating_date)大于指定日期,则仍应在最大日期返回小于指定日期的评级。所以,在下面的情况下,在1月1日的指定日期,我仍然应该得到约翰2009年6月9日的评级以及12月5日截止的史密斯值。
这是一个数据结构:
Stock_Ticker, Analyst_Name, Rating_Date, Rating_Name
G, John, 6/9/09, Hold
G, John, 1/20/10, Sell
G, Smith, 12/5/09, Buy
如果我尝试类似下面的SQL,我只会在最大日期小于指定日期时得到一个值。
Select Analyst_Ratings.Stock_Ticker,
Analyst_Ratings.Analyst_Name,
Analyst_Ratings.Rating_Name
From Analyst_Ratings
Where Rating_Date In(
Select Max(Rating_Date)
From Analyst_Ratings
Where Rating_date <= '2010-01-01')
答案 0 :(得分:2)
Select Analyst_Ratings.Stock_Ticker,
Analyst_Ratings.Analyst_Name,
Analyst_Ratings.Rating_Name
From Analyst_Ratings
Where Rating_Date In(
Select Max(Rating_Date)
From Analyst_Ratings
group by stock_ticker, analyst_name
Where Rating_date <= '2010-01-01')
试试这个
答案 1 :(得分:0)
这是使用T-SQL语法,但这个想法应该让你开始:
Select ar.Stock_Ticker,
ar.Analyst_Name,
ar.Rating_Name,
ar.Rating_Date
From Analyst_Ratings ar
Inner Join (
select ar2.Stock_Ticker
, ar2.Analyst_Name
, Max(ar2.Rating_Date) as Last_Rating_Date
from Analyst_Ratings ar2
where ar2.Rating_Date <= '2010-01-01')
group by
ar2.STock_Ticker
, ar2.Analyst_Name
) as Last_Ratings lr
on ar.Stock_Ticker = lr.Stock_Ticker
and ar.Analyst_Name = lr.Analyst_Name
and ar.Rating_Date = lr.Last_Rating_Date