Select maximum value from multiple columns with SQL Server 2005

Posted by Max | Posted in sql | Posted on 01-11-2007

0


Sometimes you need to return maximum (or minimum value) for more than one column. In my example I’m selecting book list with highest and most recent rating for each book. This query will work with MS SQL Server 2005.

  1. CREATE TABLE Books(
  2.         BookID int NOT NULL,
  3.         Title varchar(50) NOT NULL,
  4. ) ON [PRIMARY]
  5. GO
  6.  
  7. CREATE TABLE Ratings(
  8.     RatingID int NOT NULL,
  9.     BookID int NULL,
  10.     Rating int NULL,
  11.     DateAdded datetime NULL
  12. ) ON [PRIMARY]
  13. GO
  14.  
  15. INSERT Books VALUES (1, ‘Book A’)
  16. INSERT Books VALUES (2, ‘Book B’)
  17.  
  18. INSERT Ratings VALUES (1, 1, 4, ‘2007-11-01′)
  19. INSERT Ratings VALUES (1, 1, 4, ‘2007-10-27′)
  20. INSERT Ratings VALUES (1, 2, 4, ‘2007-10-25′)
  21. INSERT Ratings VALUES (1, 2, 5, ‘2007-10-25′)
  22. GO
  23.  
  24. WITH RatingsV AS
  25. (
  26.         SELECT B.Title, R.Rating, R.DateAdded,
  27.                 ROW_NUMBER() OVER (
  28.                         PARTITION BY B.BookID ORDER BY R.Rating DESC, R.DateAdded DESC
  29.                 ) AS Pos
  30.         FROM Books B
  31.         INNER JOIN Ratings R ON R.BookID = B.BookID
  32. )
  33. SELECT *
  34. FROM RatingsV
  35. WHERE Pos = 1
  36. GO

The following data is returned when query is run:

Title              Rating      DateAdded               Pos
------------------ ----------- ----------------------- -------
Book A             4           2007-11-01 00:00:00.000 1
Book B             5           2007-10-25 00:00:00.000 1
  • Share/Bookmark