2016-11-17 46 views
-1

我只想显示每个ID的记录少于10个条目的ID,一个ID可能有几个值,如下面的数据中所示。我想 我已经尝试此查询,但它也选择了记录ID 2选择少于10个条目的记录sql server

select ID, Name ,LastName ,PaymentDate,POSITION 
    From (select ID, Name ,LastName ,PaymentDate ,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY PaymentDate DESC) AS POSITION 

    ) 
    where Position < 10 

任何帮助,请

ID Name LastName PaymentDate 
    1 John Abraham 2015-05-08 
    1 John Abraham 2014-05-08 
    1 John Abraham 2013-05-08 
    1 John Abraham 2012-05-08 
    1 John Abraham 2011-05-08 
    1 John Abraham 2010-05-08 
    ------------------------------ 
    2 Adam White 2015-05-08 
    2 Adam White 2014-05-08 
    2 Adam White 2013-05-08 
    2 Adam White 2012-05-08 
    2 Adam White 2011-05-08 
    2 Adam White 2010-05-08 
    2 Adam White 2009-05-08 
    2 Adam White 2008-05-08 
    2 Adam White 2007-05-08 
    2 Adam White 2006-05-08 
    2 Adam White 2005-05-08 
    2 Adam White 20004-05-08 

回答

1

请尝试:

Select ID, Name, LastName, PaymentDate 
    From MyTable 
Where ID in (Select ID From MyTable Group By ID Having Count(*) < 10); 
+0

非常感谢,如预期般运作良好。我已经完成了这个查询,子查询中有一点错误。 – Ilyas

2
SELECT ID, COUNT(ID) 
FROM sometable 
GROUP BY ID 
HAVING COUNT(ID) < 10 
2

你想count(*),不row_number()

select ID, Name, LastName, PaymentDate 
from (select ID, Name, LastName, PaymentDate, 
      count(*) over (partition by ID) as cnt 
     from . . . 
    ) t 
where cnt < 10; 

这显示行(你的问题建议是你想要的)。如果你只想要的ID,然后聚集更好:

select id 
from t 
group by id 
having count(*) < 10; 
+0

感谢戈登,但它不能正常工作,它确实有效的子查询,如下。 – Ilyas

+0

@Ilyas。 。 。你是什​​么意思“它不工作”?这些应该做你所要求的。 –

+0

我试过了你的查询,但它没有给我预期的结果。该查询还会显示一些ID,其中有更多10个条目 – Ilyas

相关问题