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