2015-12-15 51 views
3

我有一个表,其中包含IntID和作为日期数据类型的日期的PatientId。如何找到关于COUNT的MAX的结果关系

它看起来像下面

patientId Date 
    101  01/01/2001 
    102  01/02/2001 
    103  01/03/2002 
    104  01/03/2004 
    105  01/03/2004 
    106  01/04/2004 

而且我要的结果会给我

Count Year 
3  2004 

,因为它有最患者,也它,我们有两个一年有相同数量的病人那么我们应该同时显示两年的患者数量。 谢谢。

+0

哪'RDBMS'您使用 –

+0

的Microsoft SQL Server –

回答

0

使用YEAR函数从date列中提取年份。使用提取的一年group by获得

select TOP 1 year([Date]),count(1) as [Count] 
from Yourtable 
Group by year([Date]) 
Order by [Count] desc 

年的count将使用DATEPART

select TOP 1 Datepart(year,[Date]),count(1) as [Count] 
from Yourtable 
Group by Datepart(year,[Date]) 
Order by [Count] desc 
0

另一种方式DATEPART功能是你在这种情况下的朋友。但是,要获得所有行的匹配情况,简单的TOP将不起作用。在这种情况下,需要不同的编码方法。

您可以使用RANK()命令,但这比这个要求更复杂。相反,使用通用表达式(CTE)。

在这里,我设置了一个测试表。因为我需要两年的行相同的计数,我伸出您的样品放入2005

CREATE TABLE MyTable (
    custID INT, 
    [Date] DATE 
    ) 

TRUNCATE TABLE MyTable; 

INSERT INTO MyTable 
VALUES 
    (101, '01/01/2001'), 
    (102, '01/02/2001'), 
    (103, '01/03/2002'), 
    (104, '01/03/2004'), 
    (105, '01/03/2004'), 
    (106, '01/04/2004'), 
    (107, '02/01/2005'), 
    (108, '02/02/2005'), 
    (109, '10/10/2005'); 

这是我CTE创建,其汇总数据纳入其一年计数,并针对CTE查询。

WITH MyData AS (
    SELECT 
     DATEPART(year, [Date]) AS [Year], 
     COUNT(*) AS ct 
    FROM MyTable 
    GROUP BY Datepart(year, [Date]) 
    ) 
-- Now we issue the SELECT statement against the CTE itself 

SELECT * 
FROM MyData 
WHERE ct = (SELECT MAX(ct) FROM MyData) 

这里是输出:

Year ct 
2004 3 
2005 3