1

Information私はこのようなテーブルを持っています:

ID    From     To        Product          Date  
1         A         B          ProdA         2012-10-01  
2         A         B          ProdA         2012-10-13  
3         A         B          ProdB         2012-10-17  
4         A         B          ProdC         2012-10-18  
5         A         C          ProdB         2012-10-02  
6         A         C          ProdC         2012-10-04  
7         A         C          ProdD         2012-10-12  
8         A         C          ProdE         2012-10-14  
9         A         D          ProdA         2012-10-11  
10       A         D          ProdA         2012-10-14  

FromとToの組み合わせを関係と呼びましょう。したがって、(A、B)と(A、C)は関係です。私がする必要があるのは、1週間以内にさまざまな
製品 を送受信する関係を見つけることです。したがって、上記の例では、クエリは次を返すことになっています。

A    B
A    C

これらの行が一致するため:

2         A         B          ProdA         2012-10-13  
3         A         B          ProdB         2012-10-17  
4         A         B          ProdC         2012-10-18  

5         A         C          ProdB         2012-10-02  
6         A         C          ProdC         2012-10-04  

7         A         C          ProdD         2012-10-12  
8         A         C          ProdE         2012-10-14  

SELECT ID, From, To, Product, Date FROM Information GROUP BY From, To始めるべきだとは思いますが、次に何が起こるかわかりません。何か助けてください?

4

2 に答える 2

1
select Distinct [From],[TO],year([Date]) as y ,datepart(wk,[Date]) as w
into #tmp
From Tablex

Select t1.*
from #tmp t1
Join #tmp t2 on t1.From=t2.From and t1.y=t2.y and t1.w=t2.y and t1.to<>t2.to
 Drop table #tmp
于 2012-10-31T08:08:38.780 に答える
1

おそらくこのようなもの:

declare @t table(id int identity(1,1), [from] char default 'A', [to] char, product char(5), date date)
-- populating testdata works with sql server 2008+
insert @t ([to],product, date) values
('B','ProdA','2012-10-01'),('B','ProdA','2012-10-13'),
('B','ProdB','2012-10-17'),('B','ProdC','2012-10-18'),
('C','ProdB','2012-10-02'),('C','ProdC','2012-10-04'),
('C','ProdD','2012-10-12'),('C','ProdE','2012-10-14'),
('D','ProdA','2012-10-11'),('D','ProdA','2012-10-14')


select * from @t t where exists 
(select 1 from @t where t.[from] = [from] and t.[to] = [to] and 
t.product <> product and t.date between dateadd(day, -7, date) and 
dateadd(day, 7, date))
于 2012-10-31T08:32:51.270 に答える