具有多个条件的SQL查询

时间:2015-07-17 16:03:11

标签: mysql sql

如何编写一个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')

2 个答案:

答案 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