2016-12-01 5 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エントリのみを返信したい場合は、1年以上前であれば、0時間以上経過している必要があります。

上記の表では、合計時間が> 0(このケースでは5)であるため、select文はproj1 | 2015-03-03 00:00:00.000を返します。最も新しい日付は> 0時間で、1年以上前です。

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でグループ分けしているので、どちらかが異なると、別のグループを形成します。表示されている2つの行には、異なる「時間」の値があります。

このように、上記のコメントで示されているように、1行だけが必要な場合は、group by句からhoursフィールドを削除してください。

+0

パーフェクト、それは今動作します、ありがとうございます。毎回別のグループを形成していることを知らなかった。まだこのすべてを学ぼうとしています! – pfinferno

関連する問題