我有2张桌子。 MarketAction具有我所发现的名为' B1'的价值,它将与' Ticks'匹配。 TickTable中的字段。
(MarketAction表是2500万行,TickTable是300行)
勾选表如下所示:
TickID Ticks MinorMagnet
140 2.80 1
141 2.82 0
142 2.84 0
143 2.86 1
144 2.88 0
145 2.90 0
146 2.92 0
147 2.94 0
我需要找到' TickDiff',并插入' B1'和' TickDiff'进入一个新的临时表。
如果我们查看了B1'的TickID?从TickTable中,我需要它来找到B1 TickID和最近的MinorMagnet = 1
TickID值(第一个更高(或零),第一个更低(或零))之间的TickID差异
这适用于高:
WITH T1 AS
(
SELECT TOP 20 *,
144 - TickID AS TickDiff
FROM TickTable
WHERE MinorMagnet = 1
ORDER BY ABS( Ticks - 2.88 )
)
SELECT TOP 1 *
FROM T1
WHERE TickDiff >= 0
如果我想要较低的一个,我可以修改:
SELECT TOP 1 *, ABS(TickDiff)
FROM T1
WHERE TickDiff <= 0
但显然有效,因为我明确说明了MarketAction的值。 B1 = 2.88和144是B1的TickID。
我尝试了各种各样的联接和其他事情......无法解决这个问题...
如何让它找到&#39; TickDiff&#39;对于MarketAction中的每个B1值?
答案 0 :(得分:0)
如果我理解你的问题,那么这个查询可能就是你想要的:
select tickid, ticks, minormagnet, min(abs(tickdiff)) tickdiff
from (
select ma.TickID, t.Ticks, t.MinorMagnet, tickdiff = t.TickID - oa.TickID
from MarketAction ma
join ticktable t on ma.TickID = t.TickID
outer apply (
select top 2 TickID
from ticktable
where MinorMagnet = 1
order by abs(t.Ticks-Ticks)
) oa
) x
group by tickid, ticks, minormagnet;