AdventureWorks Database: Return the difference in sales quotas for a specific employee over previous years
SQL Query - AdventureWorks: Exercise-104 with Solution
104. From the following table write a query in SQL to return the difference in sales quotas for a specific employee for the years 2012 and 2013. Returun BusinessEntityID, sales year, current quota, and previous quota.
Sample table: Sales.SalesPersonQuotaHistorybusinessentityid|quotadate |salesquota|rowguid |modifieddate | ----------------+-----------------------+----------+------------------------------------+-----------------------+ 274|2011-05-31 00:00:00.000| 28000|99109bbf-8693-4587-bc23-6036ec89e1be|2011-04-16 00:00:00.000| 274|2011-08-31 00:00:00.000| 7000|dfd01444-8900-461c-8d6f-04598dae01d4|2011-07-17 00:00:00.000| 274|2011-12-01 00:00:00.000| 91000|0a69f453-9689-4ccf-a08c-c644670f5668|2011-10-17 00:00:00.000| 274|2012-02-29 00:00:00.000| 140000|da8d1458-5fb9-4c3e-9ead-8f5ce1393047|2012-01-15 00:00:00.000| 274|2012-05-30 00:00:00.000| 70000|760cef84-b980-417b-a667-7358c38857f0|2012-04-15 00:00:00.000| 274|2012-08-30 00:00:00.000| 154000|fb29e024-f26a-49aa-a7cc-c99ae7ba4853|2012-07-16 00:00:00.000| 274|2012-11-30 00:00:00.000| 107000|13947d2c-a254-47c9-8817-cbd186ffa526|2012-10-16 00:00:00.000| 274|2013-02-28 00:00:00.000| 58000|bc1a222f-47a0-48d1-9c56-ac873269dc98|2013-01-14 00:00:00.000| 274|2013-05-30 00:00:00.000| 263000|8b4e3cbf-f0ef-49c5-9a8c-87679055057e|2013-04-15 00:00:00.000| 274|2013-08-30 00:00:00.000| 116000|e9de95e3-b119-4441-bd1d-b27fc4516022|2013-07-16 00:00:00.000| 274|2013-11-30 00:00:00.000| 84000|7cea47b5-8391-4414-a866-ff6ec6628cd3|2013-10-16 00:00:00.000| 274|2014-03-01 00:00:00.000| 187000|0cfb6474-20aa-46d3-a5c0-29dba2eda025|2014-01-15 00:00:00.000| -- more --
Sample Solution:
-- Selecting the business entity ID, sales year, current quota, and previous quota for a specific salesperson
SELECT BusinessEntityID, date_part('year',QuotaDate) AS SalesYear, SalesQuota AS CurrentQuota,
LAG(SalesQuota, 1,0) OVER (ORDER BY date_part('year',QuotaDate)) AS PreviousQuota
-- From the Sales.SalesPersonQuotaHistory table
FROM Sales.SalesPersonQuotaHistory
-- Filtering the data for a specific salesperson and specific years
WHERE BusinessEntityID = 275 AND date_part('year',QuotaDate) in (2012,2013);
Explanation:
- This SQL query retrieves the business entity ID, sales year, current quota, and previous quota for a specific salesperson for the years 2012 and 2013.
- The SELECT clause specifies the columns to be retrieved, including the sales year calculated from the QuotaDate, the current quota, and the previous quota.
- The FROM clause indicates the source table from which the data will be retrieved, which is the SalesPersonQuotaHistory table.
- The WHERE clause filters the data for a specific salesperson with BusinessEntityID 275 and limits the sales years to 2012 and 2013.
- The LAG window function retrieves the value of SalesQuota from the previous row within the ordered partition specified by the ORDER BY clause.
Sample Output:
businessentityid|salesyear|currentquota|previousquota| ----------------+---------+------------+-------------+ 275| 2012.0| 550000| 0| 275| 2012.0| 1429000| 550000| 275| 2012.0| 1324000| 1429000| 275| 2012.0| 729000| 1324000| 275| 2013.0| 1194000| 729000| 275| 2013.0| 1575000| 1194000| 275| 2013.0| 1218000| 1575000| 275| 2013.0| 849000| 1218000|
SQL AdventureWorks Editor:
Practice Online
Contribute your code and comments through Disqus.
Previous: Return the employee with the fewest number of vacation hours.
Next: Compare year-to-date sales between employees.
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-104.php
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics