2016-12-01 16 views
1

注(日):这是关系到我这里的其他问题,Select column where another related column's total is 0回报最高基于总的另一列

我有一个表叫xDays设置如下图所示:

╔══════════════╦═════════════════════════╦═══════╗ 
║ Project_Name ║   Date   ║ Hours ║ 
╠══════════════╬═════════════════════════╬═══════╣ 
║ proj1  ║ 2015-03-06 00:00:00.000 ║  2 ║ 
║ proj1  ║ 2015-03-05 00:00:00.000 ║  3 ║ 
║ proj1  ║ 2015-03-04 00:00:00.000 ║  0 ║ 
║ proj2  ║ 2016-03-03 00:00:00.000 ║  1 ║ 
║ proj2  ║ 2016-03-04 00:00:00.000 ║  0 ║ 
║ proj2  ║ 2016-03-05 00:00:00.000 ║  0 ║ 
╚══════════════╩═════════════════════════╩═══════╝ 

对于每个Project_Name总共有Hours大于0,我只想返回该项目的最后一个Date条目,如果它大于一年前,并且如果它超过0小时。

在上表中,select语句将返回proj1 | 2015-03-03 00:00:00.000,因为它的总小时数大于0(在这种情况下为5),它是最近的日期,大于0小时,并且发生在一年多以前。

现在我有:

select max(day), project_name 
from xDays 
where hours > 0 
group by project_name, hours 
having max(day) < dateadd(dd, -365, getdate()) 
order by project_name 

这成功地让我的日期>一年前> 0小时,但它不会给只是最新的一个。

对于上面的例子,它会给

2015-03-06 00:00:00.000 | proj1 
2015-03-05 00:00:00.000 | proj1 

我想用max(day)不会为同一个项目返回多个日期?

+2

除了'project_name'之外,你正在用'hours'对它进行分组。从'group by'中删除'hours'。 – Siyual

+0

是的工作!谢谢 – pfinferno

回答

2

当您有多个“分组依据”字段时,它将按组合分组。由于您按照project_name和hours分组,因此每当两者不同时,它就会形成一个单独的组。你看到的两行有不同的“小时”值。

因此,如上面的注释中所表达的,如果只需要一行,只需从group by子句中删除小时字段即可。

+0

完美,现在有用,谢谢。不知道它每次都会形成一个单独的组。仍试图学习所有这一切! – pfinferno