我需要在SQL Server中编写一个连接两个表的查询:
让我们说我的第一张桌子是TB1:
Id Date ProductId
1111 1-Jan-08 345
1112 5-Apr-10 345
1113 1-Jan-13 345
1114 1-Oct-14 345
1115 1-Jan-15 345
第二表是TB2:
Id2 Date ProductId CompanyId Flag
1 1-Jan-14 345 12 1
2 2-Jan-14 345 13 1
3 4-Jan-14 345 14 1
4 12-Nov-14 345 15 1
结果应为:
Id ProductId CompanyId
1111 345 12
1112 345 12
1113 345 12
1114 345 14
1115 345 15
即,TB1.Date< TB2.Date中的所有条目 - >然后应该选择与TB2中的最小日期相对应的CompanyID。
当TB1.Date> Tb2.Date中的所有条目 - >然后应该在TB2中采用CompanyId最大日期
当Tb1.Date介于TB2的日期之间时,应选择日期下方的CompanyId。
谢谢!
答案 0 :(得分:0)
这应该有用,但还没有对它进行过广泛的测试。你可以尝试这个,并在你认为必要的地方修改/优化它。
此代码检查以下
如果有帮助,请告诉我们
With daterange
as
(Select ProductID, max(Date) as maxdate, min(Date) as mindate
from TB2
Group by ProductID)
Select distinct a.ProductId, a.Date as TB1Date,
Case when a.Date < c.mindate then c.mindate
when a.Date > c.maxdate then c.maxdate
when a.Date between c.mindate and c.maxdate then (Select top 1 a1.Date from TB2 a1 where a1.Date < a.Date and a1.ProductId = a.ProductId order by date desc) End as TB2Date,
d.CompanyId as CompanyId
FROM TB1 a
Left join daterange c on a.ProductId = c.ProductId
Left join TB2 d on (Case when a.Date < c.mindate then c.mindate
when a.Date > c.maxdate then c.maxdate
when a.Date between c.mindate and c.maxdate then (Select top 1 a1.Date from TB2 a1 where a1.Date < a.Date and a1.ProductId = a.ProductId order by date desc) End) = d.Date