Knowledge Guide
HomeDatabasesSQL Practice Problems

Product Price on a Specific Date

Problem Statement

Table: PriceChanges
This table records the price changes of various products. Each row includes a product ID, the new price of the product, and the date when this new price became effective.

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| product_id    | int     |
| new_price     | int     |
| effective_date| date    |
+---------------+---------+
(product_id, effective_date) is the primary key for this table.
Each row in this table indicates that the price of a product was changed to a new price on a specific date.

Write a solution to find the prices of all products on a specific date, 2019-08-16. Assume the price of all products before any price change was 10.

Return the result table in the order of product_id

Example

Input:

PriceChanges table: +------------+-----------+---------------+ | product_id | new_price | effective_date| +------------+-----------+---------------+ | 1 | 20 | 2019-08-14 | | 2 | 50 | 2019-08-14 | | 1 | 30 | 2019-08-15 | | 1 | 35 | 2019-08-16 | | 2 | 65 | 2019-08-17 | | 3 | 20 | 2019-08-18 | +------------+-----------+---------------+

Output:

+------------+-------+ | product_id | price | +------------+-------+ | 1 | 35 | | 2 | 50 | | 3 | 10 | +------------+-------+

Try It Yourself

java
-- TODO: Write your user queries here

Solution

To determine the prices of all products on a specific date (2019-08-16), considering that the default price before any changes is 10, we can follow a systematic approach. This involves identifying the most recent price change for each product up to the specified date and handling cases where no price changes have occurred by assigning the default price.

SQL Query

SELECT p.product_id, COALESCE( (SELECT new_price FROM PriceChanges pc WHERE pc.product_id = p.product_id AND pc.effective_date <= '2019-08-16' ORDER BY pc.effective_date DESC LIMIT 1), 10 ) AS price FROM (SELECT DISTINCT product_id FROM PriceChanges) p ORDER BY p.product_id;

Step-by-Step Approach

Step 1: Identify Distinct Products

Retrieve all unique product_ids from the PriceChanges table to ensure that each product is considered in the final report.

SQL Query:

SELECT DISTINCT product_id FROM PriceChanges;

Explanation:

Output After Step 1:

Assuming the example input, the subquery would produce:

+------------+ | product_id | +------------+ | 1 | | 2 | | 3 | +------------+

Step 2: Determine the Latest Price Before or On 2019-08-16

For each product, identify the most recent new_price that became effective on or before 2019-08-16. This step ensures that we capture the accurate price applicable on the specified date.

SQL Query:

SELECT new_price FROM PriceChanges pc WHERE pc.product_id = p.product_id AND pc.effective_date <= '2019-08-16' ORDER BY pc.effective_date DESC LIMIT 1

Explanation:

Purpose in Main Query:
This subquery is used within the COALESCE function to fetch the latest price for each product up to the specified date. If no such price exists, COALESCE will assign the default value of 10.

Step 3: Assign Default Price Where Applicable and Order the Results

Combine the distinct products with their corresponding latest prices or assign the default price of 10 if no price changes occurred before or on 2019-08-16. Finally, sort the results by product_id.

SQL Query:

SELECT p.product_id, COALESCE( (SELECT new_price FROM PriceChanges pc WHERE pc.product_id = p.product_id AND pc.effective_date <= '2019-08-16' ORDER BY pc.effective_date DESC LIMIT 1), 10 ) AS price FROM (SELECT DISTINCT product_id FROM PriceChanges) p ORDER BY p.product_id;

Explanation:

Final Output:

Based on the example input, the final output would be:

+------------+-------+ | product_id | price | +------------+-------+ | 1 | 35 | | 2 | 50 | | 3 | 10 | +------------+-------+
🤖 Don't fully get this? Learn it with Claude

Stuck on Product Price on a Specific Date? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🎨 Explain it visually

Build the mental picture, not memorization.

I just read a lesson on **Product Price on a Specific Date** (Databases) and want to truly understand it. Explain Product Price on a Specific Date from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🤔 Walk me through it (interactive)

Socratic — adapts to where you're stuck.

Teach me **Product Price on a Specific Date** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧪 Quiz me & fix my gaps

Active recall exposes what you missed.

Quiz me on **Product Price on a Specific Date** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🧠 Make it stick

Intuition + hook + flashcards for long-term memory.

Help me remember **Product Price on a Specific Date** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes