0
私は、タスクのプロジェクトとグループ化によって成功することなく最新の終了日(ProjectsTasksEndDate
)を取得しようとしています。 BellowはSQLFiddleです。助言がありますか?グループを使用してMAX()
PS:コメントされた選択は、私が到達しようとしている選択を構築するためのベースでした。
MS SQL Server 2008のスキーマのセットアップ:1
CREATE TABLE Projects
(
id int identity primary key,
ProjectID varchar(20),
ProjectStartDate date,
ProjectEndDate date
);
CREATE TABLE ProjectsTasks
(
id int identity primary key,
ProjectID varchar(20),
ProjectsTasksStartDate date,
ProjectsTasksEndDate date
);
INSERT INTO Projects
(ProjectID, ProjectStartDate, ProjectEndDate)
VALUES
('1', '2015-01-05', '2015-04-08'),
('2', '2015-01-06', '2015-07-20'),
('3', '2015-02-05', '2015-07-22'),
('4', '2015-03-05', '2015-08-08'),
('5', '2015-03-05', '2015-09-18'),
('6', '2015-04-05', '2015-10-02'),
('7', '2016-07-05', '2016-11-20');
INSERT INTO ProjectsTasks
(ProjectID, ProjectsTasksStartDate, ProjectsTasksEndDate)
VALUES
('1', '2015-01-05', '2015-01-10'),
('1', '2015-01-06', '2015-02-20'),
('1', '2015-02-05', '2015-03-20'),
('1', '2015-03-01', '2015-03-02'),
('1', '2015-01-05', '2015-04-08'),
('2', '2015-06-01', '2015-06-20'),
('3', '2015-12-20', '2015-12-21');
問合せ:
/*
SELECT
YEAR (Projects.ProjectEndDate) AS [Year],
MONTH (Projects.ProjectEndDate) AS [Month],
COUNT (*) AS [Total]
FROM
Projects
GROUP BY
YEAR (Projects.ProjectEndDate),
MONTH (Projects.ProjectEndDate)
*/
SELECT
YEAR (MAX(ProjectsTasks.ProjectsTasksEndDate)) AS [Year],
MONTH (MAX(ProjectsTasks.ProjectsTasksEndDate)) AS [Month],
COUNT (*) AS [Total]
FROM Projects
RIGHT JOIN ProjectsTasks
ON Projects.ProjectID = ProjectsTasks.ProjectID
GROUP BY YEAR (ProjectsTasks.ProjectsTasksEndDate),
MONTH (ProjectsTasks.ProjectsTasksEndDate)
[期待結果]:
| Year | Month | Total |
|------|-------|-------|
| 2015 | 4 | 1 |
| 2015 | 6 | 1 |
| 2015 | 12 | 1 |
私はオリジナルのポストを更新しました。この場合、私は最新のタスクの終了日を探しているので、私は1行しか見ていません。あなたのtmeありがとう。 – Khrys
@Khrys最新の更新を参照してください – lad2025
これは単なる例です。実際のケースでは、TOP 1を使用することはできません。なぜなら、1つではなく、他のプロジェクトが存在するからです。 – Khrys