按时加入表,IF NULL编辑时间为1分钟

时间:2017-02-24 17:57:29

标签: sql sql-server variables

我有两张桌子。

Table 1 = My Trades
Table 2 = Market Trades

我想在交易前1分钟查询市场交易。如果表2中没有距离我的1分钟的市场交易那么我想回头看2分钟,依此类推,直到我有一场比赛。

现在我的查询让我分开了1分钟,但我无法弄清楚如果NULL或间隔3分钟如果为NULL(最多30分钟),则分开2分钟。我认为最好使用变量,但我不确定最好的方法来解决这个问题。

Select 
 A.Ticker 
,a.date_time
,CONVERT(CHAR(16),a.date_time - '00:01',120) AS '1MINCHANGE'
,A.Price
,B.Date_time
,B.Price
FROM
Trade..MyTrade as A
LEFT JOIN Trade..Market as B 
on (a.ticker = b.ticker) 
and (CONVERT(CHAR(16),a.date_time - '00:01',120) = b.Date_time)

1 个答案:

答案 0 :(得分:1)

在MySQL中没有很好的方法可以做到这一点。但是,因为您的代码看起来像SQL Server,我将使用APPLY

在此处显示该解决方案
select t.Ticker ,
       convert(CHAR(16), t.date_time - '00:01', 120) AS '1MINCHANGE',
       t.Price,
       m.Date_time,
       m.Price
from Trade..MyTrade as t outer apply
     (select top 1 m.*
      from Trade..Market m
      where a.ticker = b.ticker and
            convert(CHAR(16), t.date_time - '00:01', 120) >= b.Date_time)
      order by m.DateTime desc
     ) m;