指向另一个表并返回相邻数据马克斯()导致
我有以下两个表:指向另一个表并返回相邻数据马克斯()导致
使用SQL Server 2012
,我想知道从每小时表,其中MaxWaitTime
和Split
的INTERVAL
匹配每天来自Daily
表的内容。我假设我需要在这里使用window function
,但我无法弄清楚正确的答案。
可以有从hourly
表匹配倍其中MaxWaitTime
是0
一整天,因此,所有的行。在这种情况下,我更喜欢Null
答案,但那天最早的INTERVAL
就没问题。
也会有多次INTERVALs
有相同的等待时间。在这种情况下,第一个INTERVAL
当天MaxWaitTime
应该返回。
您可以使用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;
看起来像一个简单的左连接应该在表格之间工作。我只是简单地通过上面显示的数据...
查询应该看起来像这样。如果连接失败,则返回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
哈利,感谢您的回复:如果你想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;
。我也认为左连接最初会做,但是这个解决方案由于上述条件而失败 - 当多行匹配时,我在同一天得到多个结果。上面的表格实际上只是插图。 –
你能提供实际数据吗?插图数据表明,上述查询应该工作..正在重复什么?看起来不像Interval,所有的数据都可以在Daily Table中找到..所以我只是不知道数据是如何被复制的。除非你有不同的时间间隔相同的最大等待时间.. – Harry
'外部应用'做到了!谢谢! –