我有第一张表T1,其中包含日期和其他一些信息:
--TABLE1
date, field1, field2, field3...
20120801 | info1 | info2 | ...
20120802 | info1 | info2 | ...
20120803 | info1 | info2 | ...
20120804 | info1 | info2 | ...
20120805 | info1 | info2 | ...
20120806 | info1 | info2 | ...
我有第二个表T2,其中包含与日期相关的信息,包括工作日和周末日:
--TABLE2
date, businessdayofthemonth, day, field4...
20120801 | 1 | Wednesday | ...
20120802 | 2 | Thursday | ...
20120803 | 3 | Friday | ...
20120804 | NULL | Saturday | ...
20120805 | NULL | Sunday | ...
20120806 | 4 | Lundi | ...
现在我要做的是: 我希望对于表1的每一行,表2的日期与给定日期之后的第3个工作日完全对应< => (ISNUMERIC(businessdayofthemonth)= 1)
例如,如果我选择T1的第一行:
dateT1 | dateT1+3 | TheDateIWant |
20120801 | 20120804 | 20120806 | info1 | info2 | ...
希望我正确解释,谢谢
修改 我想我没有解释这个问题:我需要在给定日期之后3个工作日的日期,这意味着:
有:
20120803 | 3 | Friday | ...
我想要接下来的3个工作日:
20120808
btw为什么要downvote?我在一个数十亿行的数据库上工作,这只是我在超过15个表的300行请求中所做的工作的一部分,如果我发布,我试过。
答案 0 :(得分:3)
您可以这样做:
select t1.date, t1.field1, t1.field2,
(
select top 1 date
from Table2 t2
where businessdayofthemonth is not null
order by abs((t1.Date + 3) - t2.Date)
) as T2_Date
from Table1 t1
请注意,这将为您提供Table1.Date + 3
之前,之前或之后的最近日期。如果您只想要日期或之后,您可以这样做:
select t1.date, t1.field1, t1.field2,
(
select top 1 date
from Table2 t2
where businessdayofthemonth is not null
and t2.Date >= (t1.Date + 3)
order by t2.Date - (t1.Date + 3)
) as T2_Date
from Table1 t1