AdventureWorks Database: Calculate row numbers for rows between 50 to 60 inclusive
SQL Query - AdventureWorks: Exercise-122 with Solution
122. From the following table write a query in SQL to calculate row numbers for all rows between 50 to 60 inclusive. Sort the result set on orderdate.
Sample table: Sales.SalesOrderHeadersalesorderid|revisionnumber|orderdate |duedate |shipdate |status|onlineorderflag|purchaseordernumber|accountnumber |customerid|salespersonid|territoryid|billtoaddressid|shiptoaddressid|shipmethodid|creditcardid|creditcardapprovalcode|currencyrateid|subtotal |taxamt |freight |totaldue |comment|rowguid |modifieddate | ------------+--------------+-----------------------+-----------------------+-----------------------+------+---------------+-------------------+--------------+----------+-------------+-----------+---------------+---------------+------------+------------+----------------------+--------------+-----------+----------+---------+-----------+-------+------------------------------------+-----------------------+ 43659| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO522145787 |10-4020-000676| 29825| 279| 5| 985| 985| 5| 16281|105041Vi84182 | | 20565.6206| 1971.5149| 616.0984| 23153.2339| |79b65321-39ca-4115-9cba-8fe0903e12e6|2011-06-07 00:00:00.000| 43660| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO18850127500 |10-4020-000117| 29672| 279| 5| 921| 921| 5| 5618|115213Vi29411 | | 1294.2529| 124.2483| 38.8276| 1457.3288| |738dc42d-d03b-48a1-9822-f95a67ea7389|2011-06-07 00:00:00.000| 43661| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO18473189620 |10-4020-000442| 29734| 282| 6| 517| 517| 5| 1346|85274Vi6854 | 4| 32726.4786| 3153.7696| 985.553| 36865.8012| |d91b9131-18a4-4a11-bc3a-90b6f53e9d74|2011-06-07 00:00:00.000| 43662| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO18444174044 |10-4020-000227| 29994| 282| 6| 482| 482| 5| 10456|125295Vi53935 | 4| 28832.5289| 2775.1646| 867.2389| 32474.9324| |4a1ecfc0-cc3a-4740-b028-1c50bb48711c|2011-06-07 00:00:00.000| 43663| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO18009186470 |10-4020-000510| 29565| 276| 4| 1073| 1073| 5| 4322|45303Vi22691 | | 419.4589| 40.2681| 12.5838| 472.3108| |9b1e7a40-6ae0-4ad3-811c-a64951857c4b|2011-06-07 00:00:00.000| 43664| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO16617121983 |10-4020-000397| 29898| 280| 1| 876| 876| 5| 806|95555Vi4081 | | 24432.6088| 2344.9921| 732.81| 27510.4109| |22a8a5da-8c22-42ad-9241-839489b6ef0d|2011-06-07 00:00:00.000| 43665| 8|2011-05-31 00:00:00.000|2011-06-12 00:00:00.000|2011-06-07 00:00:00.000| 5|false |PO16588191572 |10-4020-000146| 29580| 283| 1| 849| 849| 5| 15232|35568Vi78804 | | 14352.7713| 1375.9427| 429.9821| 16158.6961| |5602c304-853c-43d7-9e79-76e320d476cf|2011-06-07 00:00:00.000| -- more --
Sample Solution:
-- Creating a Common Table Expression (CTE) named OrderedOrders
WITH OrderedOrders AS
(
-- Selecting specific columns from the SalesOrderHeader table and calculating row numbers based on OrderDate
SELECT
SalesOrderID,
OrderDate,
-- Calculating row numbers based on OrderDate
ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
FROM
Sales.SalesOrderHeader
)
-- Selecting columns from the OrderedOrders CTE
SELECT
SalesOrderID,
OrderDate,
RowNumber
FROM
OrderedOrders
-- Filtering records where RowNumber falls between 50 and 60
WHERE
RowNumber BETWEEN 50 AND 60;
Explanation:
- This SQL code creates a Common Table Expression (CTE) named OrderedOrders to calculate row numbers based on the OrderDate column.
- The CTE selects specific columns (SalesOrderID and OrderDate) from the SalesOrderHeader table and calculates row numbers (RowNumber) using the ROW_NUMBER() function, ordering the rows by OrderDate.
- After defining the CTE, the main query selects columns from the OrderedOrders CTE.
- The main query filters records where the RowNumber falls between 50 and 60, effectively retrieving rows ranked between 50th and 60th based on OrderDate.
- The result set will contain SalesOrderID, OrderDate, and the corresponding row numbers for orders falling within the specified row number range.
Sample Output:
salesorderid|orderdate |rownumber| ------------+-----------------------+---------+ 43708|2011-06-02 00:00:00.000| 50| 43709|2011-06-02 00:00:00.000| 51| 43710|2011-06-02 00:00:00.000| 52| 43711|2011-06-03 00:00:00.000| 53| 43712|2011-06-03 00:00:00.000| 54| 43713|2011-06-04 00:00:00.000| 55| 43714|2011-06-04 00:00:00.000| 56| 43715|2011-06-04 00:00:00.000| 57| 43716|2011-06-04 00:00:00.000| 58| 43717|2011-06-04 00:00:00.000| 59| 43718|2011-06-05 00:00:00.000| 60|
Contribute your code and comments through Disqus.
Previous: Calculate a row number based on SalesYTD ranking.
Next: Return first and last name, and other columns using partition by clause.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.
https://www.w3resource.com/sql-exercises/adventureworks/sql-adventureworks-exercise-122.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics