我得到了一个任务来显示cpu使用趋势,作为构建过程的一部分,该过程还进行回归测试。
每个单独的测试用例运行在RegCaseResult表中都有一个记录。RegCaseResult表如下所示:

id   projectName  ProjectType  returnCode  startTime   endTime           totalMetrics

1    'first'      'someType'   16           'someTime' 'someOtherTime'   222

retrgaseResult.totalMetrics是一个特殊的键,它通过threadMetrics.id链接到另一个名为threadMetrics的表。
以下是threadmetrics的外观:
id   componentType   componentName   cpuTime   linkId

1    'Job Totals'    'Job Totals'    'totalTime' 34223
2    'parser1'       'parser1'       'time1'     null
3    'parser2'       'generator1'    'time2'     null
4    'generator1'    'generator1'    'time3'     null
------------------------------------------------------
5    'Job Totals'    'Jot Totals'    'totalTime' 9899
...

componentname为“job totals”的行是RegCaseResult表中的totalMetrics将链接到的行,而“totalTime”是给定某个项目类型时我真正想要得到的行。“作业总数”实际上是其他记录的总和-在上面的示例中,是time1到time3的总和。ThreadMetrics表末尾的LinkID可以链接回RegCaseResult.id。
这些要求还指出,我应该有一种方法来强制执行条件,该条件只包括那些在特定时期内具有一致返回代码的项目。这就是我最初的问题来源如下:
我创建了以下简单的表格来显示我要实现的目标:
id   projectName  returnCode

1    'first'    16
2    'second'   16
3    'third'    8
4    'first'    16
5    'second'   8
6    'first'    16

基本上,我想得到所有具有一致返回代码的项目,不管返回代码值是什么。在上面的例子中,我应该只得到一个项目是“第一”。我认为这很简单,但在数据库方面我做得不好。任何帮助都很好。
我尽了最大努力想弄清楚。希望我实现了我的目标。

最佳答案

有一个简单的方法:

select projectname
from table t
group by projectname
having min(returncode) = max(returncode);

如果min()max()值相同,则所有值都相同(除非您有NULL值)。
编辑:
为了不让'third'出现,您需要一些其他规则,例如有多个返回代码。所以,你可以这样做:
select projectname
from table t
group by projectname
having min(returncode) = max(returncode) and count(*) > 1;

09-25 20:39