Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

T-SQL SELECT DISTINCT & ROW_NUMBER() OVER Ordering Problem

I'm trying to select DISTINCT rows from a view using ROW_NUMBER() OVER for paging. When I switched the ORDER BY field from a SMALLDATETIME to INT I started getting weird results:

SELECT RowId, Title, HitCount FROM
( SELECT DISTINCT Title, HitCount, ROW_NUMBER() OVER(ORDER BY HitCount DESC) AS RowId FROM ou_v_Articles T ) AS Temp
WHERE RowId BETWEEN 1 AND 5

This query returns:

RowId | Title | HitCount
=======================
4  ---  9
1  ---  43
3  ---  11
2  ---  13
5  ---  0

The results are obviously not in the correct order. I'm not sure what the problem is here, but when I removed DISTINCT it orders them correctly.

Thanks.

like image 522
Joel Avatar asked Feb 27 '23 13:02

Joel


2 Answers

Applying DISTINCT to a column list containing ROW_NUMBER() will always result in every row being distinct, as there is one ROW_NUMBER per row.

like image 197
Mitch Wheat Avatar answered Mar 02 '23 05:03

Mitch Wheat


Is the RowId value you're getting correct? Perhaps you just need an ORDER BY RowId clause on the outer query?

like image 45
Philip Kelley Avatar answered Mar 02 '23 04:03

Philip Kelley