2011-08-28 64 views
0

我有(2)表(1)为Prices,另一个是Orders结合2 SQL SELECT查询转换为一个

价格:

Symbol varchar 
Open decimal 
High decimal 
Low decimal 
Date DateTime 

订单:

Ticker varchar 
Enter decimal 
EntDate datetime 
Exit decimal 
ExtDate datetime 

我想要一个查询,给我所有的特定日期时间范围的定价数据和所有的o该符号为同一日期时间范围rders:

SELECT 
    T1.Symbol 
    , P1.Open 
    , P1.High 
    , P1.Low 
    , P1.Close 
    , P1.Date 
    , O1.EntDate 
    , O1.Enter 
    , O1.ExtDate 
    , O1.Exit 
FROM Prices AS P1 
INNER JOIN ORDERS AS O1 ON O1.Ticker = P1.Symbol 
WHERE P1.Date < CONVERT(datetime, '01/01/2012 10:00 AM') 

显然,这是行不通的,我得到重复价格数据的每一行订单多个列表。

例价格表

Sym Open High Low Close Date 
ABC  1   3   1   2  1/1/2011 10:01 AM 
ABC  1   3   1   2  1/1/2011 10:02 AM 
ABC  1   3   1   2  1/1/2011 10:03 AM 
ABC  1   3   1   2  1/1/2011 10:04 AM 
ABC  1   3   1   2  1/1/2011 10:05 AM 
ABC  1   3   1   2  1/1/2011 10:06 AM 
ABC  1   3   1   2  1/1/2011 10:07 AM 
ABC  1   3   1   2  1/1/2011 10:08 AM 
ABC  1   3   1   2  1/1/2011 10:09 AM 
ABC  1   3   1   2  1/1/2011 10:10 AM 

实施例的订单表

Sym Enter EntDate   Exit ExtDate 
ABC 1  1/1/2011 10:-00 3 1/1/2011 10:02 AM 
ABC 1  1/1/2011 10:-03 3 1/1/2011 10:04 AM 

示例输出用于价格和订单查询与日期和EntDate < 1/1/2011上午10点07和符号= ABC

Sym Open High Low Close    Date    Enter EntDate     Exit  ExtDate 
ABC  1   3   1   2  1/1/2011 10:01 AM  1 1/1/2011 10:-00   3   1/1/2011 10:02 AM 
ABC  1   3   1   2  1/1/2011 10:02 AM  1 1/1/2011 10:-03   3   1/1/2011 10:04 AM 
ABC  1   3   1   2  1/1/2011 10:03 AM 
ABC  1   3   1   2  1/1/2011 10:04 AM 
ABC  1   3   1   2  1/1/2011 10:05 AM 
ABC  1   3   1   2  1/1/2011 10:06 AM 
ABC  1   3   1   2  1/1/2011 10:07 AM 
+0

看起来你需要在'O1.EntDate'添加额外的过滤器或'O1.ExtDate'到限制范围,但不知道你的意思是什么“我得到多个价格数据行重复的订单列表”以及为什么这是一个问题。预计与加入。也许提供一些示例数据和期望的结果。 –

+0

我会给你上面的示例输出... – CraigJSte

+0

我会给你上面的示例输出...我尝试了太多的数据来填充窗口..本质上问题是订单数据重复自身,它提供了重复的数据一个问题。也许连接将不会有一张桌子充满价格数据,但只有少量记录/线与订单信息。 – CraigJSte

回答

1

你需要有P1.Symbol 和n OT T1.Symbol

+0

我认为这没有帮助。 – CraigJSte

0

考虑作为Price排在同一天加盟只是订单:

from Prices as P1 
left join 
     Orders as O1 
on  O1.Ticker = P1.Symbol 
     and p1.Date <= O1.ExtDate and O1.ExtDate < dateadd(day,1,p1.Date) 
+0

我将不得不做两个sql命令,并将它们合并到我的表示层中,因为我继续用多个命令填充我的sql表的每条记录/行......这使我重复订单,直到定价日期=订购EntDate – CraigJSte