我被赋予了一项任务,将CPU使用率趋势显示为构建过程的一部分,该过程也进行回归测试。
每个单独的测试用例运行在表RegrCaseResult中都有一条记录。 RegrCaseResult表看起来像这样:
id projectName ProjectType returnCode startTime endTime totalMetrics
1 'first' 'someType' 16 'someTime' 'someOtherTime' 222
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
...
包含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
基本上我想获得所有具有一致returnCode的项目,无论returnCode值是什么。在上面的示例中,我应该只获得一个项目,即#34; first"。我认为这很简单,但在数据库方面我很糟糕。任何帮助都会很棒。
我尽力说清楚。希望我已经实现了目标。
答案 0 :(得分:5)
这是一个简单的方法:
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;
答案 1 :(得分:1)
select projectName from projects
group by projectName having count(distinct(returnCode)) = 1)
这也会返回只有一个条目的项目 你想怎么处理它们?
答案 2 :(得分:0)
您可以使用Not Exists
尝试类似的内容:
Select Distinct ProjectName
From Table A
Where Not Exists
(
Select 1
From Table B
Where B.ProjectName = A.ProjectName
And B.ReturnCode <> A.ReturnCode
)
“我不确定您选择的是什么,因此您可以将Select
声明更改为您需要的内容。
答案 3 :(得分:0)
这应该这样做:
SELECT COUNT(ProjectName) AS numCount, ProjectName FROM (
SELECT ProjectName FROM Foo
GROUP BY ProjectName, ReturnCode
) AS Inside
GROUP BY Inside.ProjectName
HAVING numCount = 1
它按名称和返回代码对所有ProjectNames进行分组,然后选择那些只列出一个返回代码的项目名称。
SQLFiddle链接:http://sqlfiddle.com/#!2/c52b6/11/0