2016-10-12 88 views
0

我正在尝试查找唯一ID的最早日期实例(唯一ID具有多行数据,日期不同),然后过滤该结果以查找数据2005年和2010年使用子查询。我不断收到关键字'group'附近的错误语法:从最小和最大日期字段中查找日期范围

Select * 
from (select custnum, YEAR(min(Date_field)) as field1, Field2, field3, field4, field5 
     from table1 
     group by custnum, field2, field3, field4, field5) 
    having YEAR(min(Date_field)) between 2005 and 2010 

任何想法? 感谢您的帮助 -

+0

是custnum你UNIQUEID? –

+0

尝试在子查询中获取2005年至2010年之间的“具有年(min(Date_field))”。 –

+0

您正在使用一个子选择符,不用别名,您的'having'子句在外部'select'中,而'group by'在子选择符中。 Yo也在外部'select'中引用了不存在的子选择'Date_field'。 – ajeh

回答

0

如果我理解正确的话,你可以使用:

WITH CTE AS 
(
    SELECT custnum, 
      Field2, 
      Field3, 
      Field4, 
      Field5, 
      Field1 = MIN(Date_Field) OVER(PARTITION BY custnum) 
    FROM dbo.table1 
) 
SELECT * 
FROM CTE 
WHERE Field1 BETWEEN '20050101' AND '201'; 
+0

查询执行,但没有返回任何数据... – Gross

+0

@Gross你是否有行的'custnum'的最短日期是在2005年和2010年之间?什么是'Date_Field'数据类型? – Lamak

+0

yup-我所拥有的数据具有多行,具有相同的custnum,日期范围从1982到当前。日期字段类型是datetime – Gross