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