如何找到关系的COUNT结果的MAX

时间:2015-12-15 02:12:00

标签: sql sql-server count max

我有一个由PatientId组成的表,它是Int和Date,它是Date Data Type。

看起来像下面的

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 
由于患者人数最多,我们也有两年的患者人数相同,那么我们应该在两年内显示患者人数。 谢谢。

2 个答案:

答案 0 :(得分:0)

使用YEAR功能从date列中提取年份。使用group by中提取的年份获取年份count

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

另一种方法是使用DATEPART

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

答案 1 :(得分: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