2015-12-15 28 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