April 24, 2012

PARITION BY on two columns

We can use partition by keyword on two fields in SQL Server.
Suppose I want to fetch records  max entry of each user of
every day.

DECLARE @Table TABLE
(
LogID INT
,
UserID INT
,
LogonTime
DATETIME
)

INSERT INTO @Table
SELECT 1,3,'2012-04-20 11:11:20.933' UNION
ALL
SELECT 2,3,'2012-04-20 11:11:16.807' UNION
ALL
SELECT 3,5,'2012-04-20 11:12:16.807' UNION
ALL
SELECT 4,3,'2012-04-23 05:11:57.600' UNION
ALL
SELECT 5,4,'2012-04-23 06:23:57.600' UNION
ALL
SELECT 6,4,'2012-04-23 06:30:50.600' UNION
ALL
SELECT 7,3,'2012-04-23 09:30:12.847' UNION
ALL
SELECT 8,5,
'2012-04-23 10:30:12.847'

SELECT * FROM @Table

;WITH CTE
AS
(
SELECT UserID,LogOnTime,ROW_NUMBER() OVER (PARTITION BY UserID,CAST(LogOnTime AS DATE) ORDER BY LogOnTime DESC) AS RNo FROM @Table
)
SELECT UserID,LogOnTime FROM CTE
WHERE
RNo = 1

That’s It.
Enjoy Learning.

No comments:

Post a Comment