2015-04-01 116 views
0

下面的代码用相同的项目名称和不同的日期对多个记录进行分组。SQL Group by Max Date Including Null

问题是日期字段中的某些日期为空。我需要这种代码的方式来包含最大日期或空值。

我尝试添加或受日期为空,但那时,只是让我回到我的问题与具有多个记录

原始SQL

SELECT t1.Project_Name, t1.IssueNmb, t1.Date 
FROM Milestones_Detail_Report_Table AS t1 
WHERE (((t1.Date)=(SELECT Max(t2.Date) 
    FROM Table_Name t2 
    WHERE t2.Project_Name=t1.Project_Name 
    GROUP BY t2.Project_Name))) 

SQL与OR

SELECT t1.Project_Name, t1.IssueNmb, t1.Date 
FROM Milestones_Detail_Report_Table AS t1 
WHERE (((t1.Date)=(SELECT Max(t2.Date) 
    FROM Table_Name t2 
    WHERE t2.Project_Name=t1.Project_Name 
    GROUP BY t2.Project_Name))) OR (((t1.Date) Is Null)); 

项目表:表名

Project_Name | IssueNmb | Date 
------------------------ 
    Car  | 1  | 1/1/15 
    Car  | 1  | 2/1/15 <--This record populates 
    House  | 1  |  <--This record does NOT populate 
+1

请显示样品结果。你是什​​么意思“我需要一种方法来让这个代码包含最大日期或空值”? – 2015-04-01 19:50:23

+0

您可以用默认值替换null,假设:'1899-01-01'。使用'Iif()'函数 – 2015-04-01 19:50:24

回答

1

你可能想这where条款:

WHERE (t1.Date IS NULL) OR 
     (t1.Date = (SELECT iif(COUNT(*) <> COUNT(t2.Date), NULL, Max(t2.Date)) 
        FROM Table_Name t2 
        WHERE t2.Project_Name = t1.Project_Name 
       ) 
    ) 

这将把NULL的最大日期,所以会出现在子查询没有匹配如果t2.Date任何值NULL给定项目。

请注意,子查询中不需要group by

+0

不知道't2'中实际的数据是什么意思,在子查询中加入'LIMIT 1' – 2015-04-01 19:58:37

+0

这就是我输入的内容,并且在表达式中得到了'Unfixed function'iff' SELECT T1.Project_Name,t1.IssueNmb,t1.Date FROM TableName AS t1 WHERE(((t1.Date)is Null or(t1.Date)=(SELECT iff(COUNT(*)<> COUNT(t2。 ()); NULL,Max(t2.Date)) FROM TableName WHERE t2.Project_Name = t1.Project_Name )));' – user4581436 2015-04-01 20:19:46

+1

@ user4581436 ...该函数是'iif()'不是'iff()' 。 – 2015-04-01 22:20:13