如何在sql数据库中对数据对应用组合数学?

如何在sql数据库中对数据对应用组合数学?,sql,database,postgresql,Sql,Database,Postgresql,我想从数据库中执行一些组合运算 我的数据库表: start | end | costs | date ____________________________________ berlin | Moscow | 100 | 2014-12-10 berlin | paris | 200 | 2014-12-13 Moscow | berlin | 150 | 2014-12-20 Moscow | berlin | 100 | 2014-12-11 可能的对都是sta

我想从数据库中执行一些组合运算

我的数据库表:

start  | end    | costs | date
____________________________________
berlin | Moscow |   100 | 2014-12-10
berlin | paris  |   200 | 2014-12-13
Moscow | berlin |   150 | 2014-12-20
Moscow | berlin |   100 | 2014-12-11
可能的对都是
start-end
组合,它们具有相同的
end-start
组合。 在我的表格中,这适用于
柏林-莫斯科
莫斯科-柏林

我想计算从一个城市到另一个城市的“往返”,然后再返回同一个起始城市

我希望得到的结果表是:

start  | end    | costs | away       | wayback
berlin | moscow |   250 | 2014-12-10 | 2014-12-20
berlin | moscow |   200 | 2014-12-10 | 2014-12-11
(这意味着,当从柏林出发前往莫斯科时,回程将是莫斯科-柏林)

对于数据库查询,这可能吗


首先:我如何自联接一个表并获得所有不同的
start-end
对?

作为注释,我建议您不要将保留字用作用户定义的对象(如表或列)的
end

SELECT F.Start,
       F."end",
       F.costs + R.costs AS costs,
       F.date AS away,
       R.date AS wayback 
FROM   Table1 F
       JOIN Table1 R
           ON F."end" = R.Start
           AND R.date>F.date
           AND F.start = R."end"

作为评论,我建议您不要对用户定义的对象(如表或列)使用保留字作为
End

SELECT F.Start,
       F."end",
       F.costs + R.costs AS costs,
       F.date AS away,
       R.date AS wayback 
FROM   Table1 F
       JOIN Table1 R
           ON F."end" = R.Start
           AND R.date>F.date
           AND F.start = R."end"

作为评论,我建议您不要对用户定义的对象(如表或列)使用保留字作为
End

SELECT F.Start,
       F."end",
       F.costs + R.costs AS costs,
       F.date AS away,
       R.date AS wayback 
FROM   Table1 F
       JOIN Table1 R
           ON F."end" = R.Start
           AND R.date>F.date
           AND F.start = R."end"

作为评论,我建议您不要对用户定义的对象(如表或列)使用保留字作为
End

SELECT F.Start,
       F."end",
       F.costs + R.costs AS costs,
       F.date AS away,
       R.date AS wayback 
FROM   Table1 F
       JOIN Table1 R
           ON F."end" = R.Start
           AND R.date>F.date
           AND F.start = R."end"


你的目标是什么?1) 找出是否有从a到B的路径2)找到成本最低的模式?3) 找到路径数?4) 检测图中是否有循环(将有;-)更新:是:可以通过(递归)查询完成。避免lopps是最大的问题。我想找到一条从A-B-B到B的路径,这条路径的成本最低,关于这对遥远的回程日期。你的目标是什么?1) 找出是否有从a到B的路径2)找到成本最低的模式?3) 找到路径数?4) 检测图中是否有循环(将有;-)更新:是:可以通过(递归)查询完成。避免lopps是最大的问题。我想找到一条从A-B-B到B的路径,这条路径的成本最低,关于这对遥远的回程日期。你的目标是什么?1) 找出是否有从a到B的路径2)找到成本最低的模式?3) 找到路径数?4) 检测图中是否有循环(将有;-)更新:是:可以通过(递归)查询完成。避免lopps是最大的问题。我想找到一条从A-B-B到B的路径,这条路径的成本最低,关于这对遥远的回程日期。你的目标是什么?1) 找出是否有从a到B的路径2)找到成本最低的模式?3) 找到路径数?4) 检测图中是否有循环(将有;-)更新:是:可以通过(递归)查询完成。避免lopps是最大的问题。我想找到一条从A-B-B到B的路径,关于这对遥远的回程日期,成本最低。太好了。这让我朝着我的目标前进。您决定将条件的一半放在JOIN子句中,而另一半放在WHERE子句中,有什么特别的原因吗?@j_random_hacker不是真的,只是它是在两次不同的编辑中完成的…:)我将在JOIN中移动它们。Postgres不会使用
[]
来转义列名。您的查询将导致错误。使用-
F“end”
。太好了。这让我朝着我的目标前进。您决定将条件的一半放在JOIN子句中,而另一半放在WHERE子句中,有什么特别的原因吗?@j_random_hacker不是真的,只是它是在两次不同的编辑中完成的…:)我将在JOIN中移动它们。Postgres不会使用
[]
来转义列名。您的查询将导致错误。使用-
F“end”
。太好了。这让我朝着我的目标前进。您决定将条件的一半放在JOIN子句中,而另一半放在WHERE子句中,有什么特别的原因吗?@j_random_hacker不是真的,只是它是在两次不同的编辑中完成的…:)我将在JOIN中移动它们。Postgres不会使用
[]
来转义列名。您的查询将导致错误。使用-
F“end”
。太好了。这让我朝着我的目标前进。您决定将条件的一半放在JOIN子句中,而另一半放在WHERE子句中,有什么特别的原因吗?@j_random_hacker不是真的,只是它是在两次不同的编辑中完成的…:)我将在JOIN中移动它们。Postgres不会使用
[]
来转义列名。您的查询将导致错误。使用-
F“end”