我正面临着SQL查询的挑战。 基本上我想检索比各自的[传出任务]更晚出现[开始]的寄存器。
表格如下:
Main Project Main Link Name Start Outgoing tasks
A 1 A1 02.01.2012 A2
A 1 A2 01.01.2012 A3
...
我写的查询就是这个:
SELECT [Name], [Start], [Outgoing tasks]
FROM [Sheet1$]
WHERE [Main project] = 'A'
AND [Main link] = '1'
AND [Outgoing tasks] IS NOT NULL
AND [Start] > (SELECT [Start]
FROM [Sheet1$]
WHERE [Main project] = 'A'
AND [Main link] = '1'
AND [Name] = [Outgoing tasks])
它不会返回任何错误,但它根本不会带来预期的结果。
你们知道可能出现什么问题吗? 非常感谢任何支持!!!
更多信息:
此表来自MS Project之类的应用程序。所以我们有一个里程碑,它的数据,继承者和前身。我真正需要的是一个里程碑列表,其开始日期晚于其后继者(这是项目管理视角中的错误)。所以如果A1.Start> A2.Start,然后我应该出现在结果中。如果您需要任何进一步的细节,请告诉我。
答案 0 :(得分:1)
尝试
select t1.* from [$Sheet1] t1
inner join [$Sheet1] t2
on t1.[main project] = t2.[main project]
and t1.[main link] = t2.[main link]
and t1.[outgoing tasks] = t2.name
and t1.start>t2.start
答案 1 :(得分:0)
如果这是一个相关的子查询,则需要一种方法来引用内部查询中的外部语句表。在MySQL中你会这样做:
SELECT name, start, outgoing_tasks FROM sheet1 foo WHERE main_project = 'A' AND main_link = '1' AND outgoing_tasks IS NOT NULL AND start > (SELECT start FROM sheet1 bar WHERE main_project = 'A' AND main_link = '1' AND bar.name = foo.outgoing_tasks);
请注意,我为外部查询的表提供了foo
的别名,而内部查询的表为bar
的别名。然后我可以在嵌套(内部)查询的WHERE
谓词中引用外表:... AND bar.name = foo.outgoing_tasks ...