Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何找到关系的计数结果的最大值_Sql_Sql Server_Count_Max - Fatal编程技术网

Sql 如何找到关系的计数结果的最大值

Sql 如何找到关系的计数结果的最大值,sql,sql-server,count,max,Sql,Sql Server,Count,Max,我有一个由PatientId和Date组成的表,PatientId是Int,Date是Date数据类型 它看起来确实像下面这样 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

我有一个由PatientId和Date组成的表,PatientId是Int,Date是Date数据类型

它看起来确实像下面这样

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 
因为它有最多的病人,而且我们有两年的病人数量相同,那么我们应该用他们的病人数量来显示这两个年份。 谢谢。

使用函数从
日期列中提取年份。使用
groupby
中提取的年份来获取年份的
计数

select TOP 1 year([Date]),count(1) as [Count]
from Yourtable
Group by year([Date])
Order by [Count] desc
另一种方法是使用


在本例中,
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

您使用的是哪个
RDBMS
Microsoft SQL Server
Year    ct
2004    3
2005    3