【问题标题】:SQL - Select to correlate recordSQL - 选择关联记录
【发布时间】:2012-11-03 19:02:51
【问题描述】:

我有一个名为 Tracking 的表格:

ID_path -- step_start -- step_end -- time  
  1         A             B      10  
  1         B             C      20  
  1         C             D      30  
  2         A             C      100  
  3         D             C      20  
  3         A             N      300

我正在 Mysql 中寻找可以提取路径 A-C 的累积值的单个查询,因此它本身和所有步骤都进入:[A-C] + [A-B] + [B-C]。

选择 sum(time) from tracking where (step_start = 'A' or step_end = 'C') and ID_path = ID_path

我认为这个查询考虑到 step 的值不能同时在 start 和 end 但我不知道如何表达最后一个条件 (ID_path = ID_path) 以便只提取具有相同的记录id_path。 有具体的 SQL 函数吗?

感谢任何帮助/mysql 编码指南/建议

【问题讨论】:

标签: mysql sql select conditional-statements


【解决方案1】:

你可以这样做:

Select ID_path,sum(time)
from tracking 
where (step_start = 'A' or step_end = 'C')
group by ID_path 


SQl fiddle demo

【讨论】:

  • 谢谢乔,但我需要示例中的最终值是 130(100 来自 A-C,30 分组 A-B 和 B-c。
【解决方案2】:

我不确定你在问什么,但我怀疑是这样的:

SELECT id_path, sum(time) total
WHERE step_start = 'A' OR step_end = 'C'
GROUP BY id_path

【讨论】:

  • 感谢 Barmar,但我需要最终值,在示例中为 130(100 来自 A-C,30 分组 A-B 和 B-c)。
  • 能否有更长的路径,比如 A-B、B-D、D-E、E-F、F-C?
  • 是的,但是在同一路径中,步骤只能在开始和结束时包含 1,就像火车路径一样。
  • 这在 SQL 中很难做到,因为它需要一个迭代或递归的算法来找到完整的路径。你能把它移到调用应用程序中吗?
  • 如果没有其他解决方案,我必须使用一些 php 脚本来迭代 :-)
猜你喜欢
  • 2021-01-08
  • 2019-11-03
  • 2015-06-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
相关资源
最近更新 更多