另一種方式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 –