2017-10-16 127 views
1

我有以下两个表:指向另一个表并返回相邻数据马克斯()导致

Data tables

使用SQL Server 2012,我想知道从每小时表,其中MaxWaitTimeSplitINTERVAL匹配每天来自Daily表的内容。我假设我需要在这里使用window function,但我无法弄清楚正确的答案。

Expected Result

可以有从hourly表匹配倍其中MaxWaitTime0一整天,因此,所有的行。在这种情况下,我更喜欢Null答案,但那天最早的INTERVAL就没问题。

也会有多次INTERVALs有相同的等待时间。在这种情况下,第一个INTERVAL当天MaxWaitTime应该返回。

回答

1

您可以使用outer apply如果您想在一个最匹配:

看起来像一个简单的左联接表之间应该工作。我只是简单地通过上面显示的数据...

查询应该看起来像这样。如果连接失败,则返回NULL。

select d.*, h.interval as maxinterval 
from daily d outer apply 
    (select top 1 h.callsoffered, h.split, max(h.interval) as maxinterval 
     from hourly h 
     where convert(date, h.interval) = d.row_date and 
      h.split = d.split and 
      h.maxwaittime = d.maxwaittime 
     group by h.maxwaittime, h.split 
     having count(*) = 1 
    ) h; 
+0

'外部应用'做到了!谢谢! –

0

看起来像一个简单的左连接应该在表格之间工作。我只是简单地通过上面显示的数据...

查询应该看起来像这样。如果连接失败,则返回NULL。给它一个去..

select daily.* ,hourly.callsoffered, hourly.interval as maxinterval 

from daily 

left join hourly 
    on convert(date,hourly.interval) = daily.row_date 
    and hourly.split = daily.split 
    and hourly.maxwaittime = daily.maxwaittime 
+0

哈利,感谢您的回复:如果你想NULL多的比赛,你可以做类似的东西给它一个去..

select d.*, h.interval as maxinterval from daily d outer apply (select top 1 h.* from hourly h where convert(date, h.interval) = d.row_date and h.split = d.split and h.maxwaittime = d.maxwaittime order by h.interval asc ) h; 

。我也认为左连接最初会做,但是这个解决方案由于上述条件而失败 - 当多行匹配时,我在同一天得到多个结果。上面的表格实际上只是插图。 –

+0

你能提供实际数据吗?插图数据表明,上述查询应该工作..正在重复什么?看起来不像Interval,所有的数据都可以在Daily Table中找到..所以我只是不知道数据是如何被复制的。除非你有不同的时间间隔相同的最大等待时间.. – Harry

相关问题