我得到了一个任务来显示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;