SQLUSA.com
SQL SERVER 2008 GRAND SLAM
FREE TRIAL  CLICK HERE TO ORDER  SEARCH
SQL JOBS SQL Server Training Scripts JOB BANK
  SQL Server 2008 Training Scripts  
  SQL Server 2005 Training Scripts  
News SQL Server Articles SQL Format

How to find top 3 bidders in an auction?

Execute the following Microsoft SQL Server 2008 T-SQL database scripts in Query Editor to demonstrate the use of the T-SQL PARTITION BY statement for locating top bidders in an auction.

-- SQL auction bidding - find top 3 bidders

-- Create and populate tables with SELECT INTO

USE tempdb;

SELECT   TOP ( 10 ) ProductID,

                    ProductName = Name,

                    Color,

                    ListPrice

INTO     Product

FROM     AdventureWorks.Production.Product

WHERE    ListPrice > 800.0

         AND Color IS NOT NULL

ORDER BY NEWID()

 

SELECT   TOP ( 30 ) BidderID = ContactID,

                    FullName = FirstName + ' ' + LastName

INTO     Bidder

FROM     AdventureWorks.Person.Contact

ORDER BY NEWID()

 

SELECT AuctionID = ROW_NUMBER() OVER (Order by (Select 1)),

      ProductID, BidderID,

      Bid = convert(money,0.8 * RAND(CHECKSUM(NEWID())) * ListPrice),

      BidDate= DATEADD(day,-10*RAND(CHECKSUM(NEWID())), getdate())

INTO Auction

FROM Product p

CROSS JOIN Bidder b

 

-- Populate for multiple bids from same bidder

INSERT Auction

SELECT AuctionID = ROW_NUMBER() OVER (Order by (Select 1)),

      ProductID, BidderID,

      Bid = convert(money,0.8 * RAND(CHECKSUM(NEWID())) * ListPrice),

      BidDate= DATEADD(day,-10*RAND(CHECKSUM(NEWID())), getdate())

FROM Product p

CROSS JOIN Bidder b

 

SELECT * FROM   Auction

/*

AuctionID  ProductID  BidderID      Bid         BidDate

1     969         12589       1505.8517  2009-11-21 12:04:54.337

2     969         3811        1155.5322  2009-11-25 12:04:54.337

3     969         1086        1248.0389  2009-11-18 12:04:54.337

*/

;

 

WITH CTE

     AS (SELECT Seq1 = row_number()

         OVER(PARTITION BY ProductID,BidderID ORDER BY Bid DESC),

                ProductID,

                BidderID,

                Bid,

                BidDate

         FROM   Auction),

     CTE1

     AS (SELECT Seq2 = ROW_NUMBER()

                         OVER(PARTITION BY ProductID ORDER BY Bid DESC),

                *

         FROM   CTE

         WHERE  Seq1 = 1)

SELECT   TopBidding = Seq2,

         ProductName,

         Bidder = FullName,

         Bid = '$' + CONVERT(VARCHAR,Bid,1),

         BidDate = CONVERT(DATE,BidDate)

FROM     CTE1 c

         INNER JOIN Product p

           ON c.ProductID = p.ProductID

         INNER JOIN Bidder b

           ON b.BidderID = c.BidderID

WHERE    Seq2 IN (1,2,3)

ORDER BY ProductName,

         TopBidding

GO

/* Partial results

TopBidding ProductName Bidder Bid BidDate
1 HL Mountain Frame - Black, 42 Cassidy Bennett $1,077.25 11/25/2009
2 HL Mountain Frame - Black, 42 Savannah Travers $1,031.60 11/18/2009
3 HL Mountain Frame - Black, 42 Aaron Nicholls $999.76 11/24/2009
1 HL Mountain Frame - Black, 44 Derrick Martin $1,066.78 11/25/2009
2 HL Mountain Frame - Black, 44 Janelle Fernandez $1,038.68 11/24/2009
3 HL Mountain Frame - Black, 44 Sharon Nath $1,032.19 11/22/2009
1 HL Mountain Frame - Silver, 48 Ruben Torres $1,054.39 11/23/2009
2 HL Mountain Frame - Silver, 48 Janelle Fernandez $931.76 11/26/2009
3 HL Mountain Frame - Silver, 48 Ian Hayes $901.90 11/23/2009

 

*/

DROP TABLE Auction

DROP TABLE Product

DROP TABLE Bidder

------------

 

Order SQL 2008 GRAND SLAM Today!
SQLUSA.com Home Page
SQL Server Training at www.sqlusa.com.
SQL Server 2008 Video Training at www.sqlusa.com.
SQL Server 2005 Training Videos at www.sqlusa.com.
Microsoft SQL Server 2000 Training Videos at www.sqlusa.com.

FREE SQL & Business Intelligence / OLAP Short Videos on YOUTUBE.com

Microsoft Community Contributor 2011
Invest in Your SUCCESS!

Search SQLUSA FREE SQL Server Articles & FREE T-SQL Scripts


Copyright 2005-2011, SMI Corp. All Rights Reserved.

SQL Server 2012 is a program product of Microsoft Corporation.
SQL Server 2008 is a program product of Microsoft Corporation.
SQL Server 2005 is a program product of Microsoft Corporation.
SQL Server 2000 is a program product of Microsoft Corporation.