dra*_*n66 2 mysql sql database
我被赋予了一项任务,将CPU使用率趋势显示为构建过程的一部分,该过程也进行回归测试.
每个单独的测试用例运行在表RegrCaseResult中都有一条记录.RegrCaseResult表看起来像这样:
id projectName ProjectType returnCode startTime endTime totalMetrics
1 'first' 'someType' 16 'someTime' 'someOtherTime' 222
Run Code Online (Sandbox Code Playgroud)
RegrCaseResult.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
...
Run Code Online (Sandbox Code Playgroud)
具有compnentName'Job Totals'的行是RegrCaseResult表中的totalMetrics将链接到的行,'totalTime'是我在给定某个projectType时真正想要得到的.'Job Totals'实际上是其他记录的总和 - 在上面的例子中,是time1到time3的总和.表ThreadMetrics末尾的linkId可以链接回RegrCaseResult.id.
这些要求还规定我应该有办法强制执行条件,该条件仅包括在特定时期内具有一致返回代码的项目.这是我最初的问题来自如下:
我创建了以下简单表来展示我想要实现的目标:
id projectName returnCode
1 'first' 16
2 'second' 16
3 'third' 8
4 'first' 16
5 'second' 8
6 'first' 16
Run Code Online (Sandbox Code Playgroud)
基本上我想获得所有具有一致returnCode的项目,无论returnCode值是什么.在上面的示例中,我应该只获得一个"第一"的项目.我认为这很简单,但在数据库方面我很糟糕.任何帮助都会很棒.
我尽力说清楚.希望我已经实现了我的目标.
这是一个简单的方法:
select projectname
from table t
group by projectname
having min(returncode) = max(returncode);
Run Code Online (Sandbox Code Playgroud)
如果min()和max()值相同,则所有值都相同(除非您有NULL值).
编辑:
要'third'避开,您需要一些其他规则,例如拥有多个返回代码.所以,你可以这样做:
select projectname
from table t
group by projectname
having min(returncode) = max(returncode) and count(*) > 1;
Run Code Online (Sandbox Code Playgroud)