CREATE TABLE dbo.Payments
(
payment_id INT IDENTITY NOT NULL,
create_date DATETIME NOT NULL,
CONSTRAINT PK_Payments PRIMARY KEY CLUSTERED (payment_id)
)
GO
INSERT INTO dbo.Payments (create_date)
SELECT '2009-02-25 12:00:00.000' UNION
SELECT '2009-02-25 12:45:00.000' UNION
SELECT '2009-02-25 12:30:00.000' UNION
SELECT '2009-02-25 13:10:00.000' UNION
SELECT '2009-02-25 13:22:00.000' UNION
SELECT '2009-02-25 14:09:00.000' UNION
SELECT '2009-02-25 14:40:00.000'
GO
SELECT
CAST(CONVERT(VARCHAR(13), T1.create_date, 121) + ':00:00.000' AS DATETIME),
COUNT(T3.payment_id) + 1
FROM
dbo.Payments T1
LEFT OUTER JOIN dbo.Payments T2 ON
T2.create_date >= CAST(CONVERT(VARCHAR(13), T1.create_date, 121) + ':00:00.000' AS DATETIME) AND
T2.create_date < T1.create_date
LEFT OUTER JOIN dbo.Payments T3 ON
T3.create_date >= T1.create_date AND
T3.create_date < DATEADD(hh, 1, CAST(CONVERT(VARCHAR(13), T1.create_date, 121) + ':00:00.000' AS DATETIME)) AND
T3.payment_id <> T1.payment_id
WHERE
T2.payment_id IS NULL
GROUP BY
CAST(CONVERT(VARCHAR(13), T1.create_date, 121) + ':00:00.000' AS DATETIME)
GO