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