2010-04-17 52 views
1

我正在尝试制定一个查询,该查询使用事件编号自动连接到一个表上。我从来没有做过自我加入。SQL自加入查询帮助

我想要查询的是当一个客户已经开始在切斯特的城市,看看他们搬到了什么城市。但我不想看到他们是否在另一个城市开始。我也希望只看到一次行动(所以我只想看看他们是否从切斯特到伦敦,而不是从伦敦到伦敦切斯特到伦敦)

如果他们搬到另一个城市,StartTimeDate是相同的EndDateTime 。

数据,如果他们在切斯特市开始了如下例子: -

 

clientid  EventNumber  City    StartDateTime     EndDateTime 
1     1   Chester   10/03/2009    11/04/2010 13:00 
1     1   Liverpool  11/04/2010 13:00   30/06/2010 16:00 
1     1   Wales   30/07/2010 16:00 
 

的结果,我想看到的是在第2行 - 因此它只能说明我的利物浦。

任何人都可以指出正确的方向吗?

回答

3

您可以使用别名,它允许您使用同一个表的两个实例(与你的表的名称替换MyTable):

SELECT A.clientid, A.EventNumber, B.City AS CityTo, A.EndDateTime AS MoveDateTime 
    FROM MyTable A INNER JOIN MyTable B 
     ON A.clientid = B.clientid 
     AND A.EventNumber = B.EventNumber 
     AND A.EndDateTime = B.StartDateTime 
WHERE A.City = 'Chester' 
+1

这个SQL查询是确定的,但你应该添加一个地方条件来过滤你正在寻找的城市,否则它将返回人们从任何城市移动的所有行。 那条件应该与表A – Claudia 2010-04-17 14:45:40

+0

@Claudia:当然,感谢评论。 WHERE子句添加。 – Heinzi 2010-04-17 16:37:39

+0

非常感谢:) – user319160 2010-04-18 14:01:45