Write a query to retrieve the first order placed by each customer.

This question was asked in Interview at black rock. Read more

Company: BlackRock

CTC: 26LPA

SourceLinkedIn

SQL Interview Question

Q. Write a query to retrieve the first order placed by each customer.

-- Create the Customers table
CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100),
    City VARCHAR(50)
);

-- Create the Orders table
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE,
    TotalAmount DECIMAL(10, 2),
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

-- Insert sample data into Customers table
INSERT INTO Customers VALUES
(1, 'John', 'Doe', '[email protected]', 'New York'),
(2, 'Jane', 'Smith', '[email protected]', 'Los Angeles'),
(3, 'Emily', 'Johnson', '[email protected]', 'Chicago'),
(4, 'Michael', 'Brown', '[email protected]', 'Houston');

see this code on db-fiddle

Write a query to retrieve the first order placed by each customer

Solution

Solution 1

SELECT 
	customerid, 
    MIN(OrderDate) AS first_order_date
FROM Orders
GROUP BY customerid;
Write a query to retrieve the first order placed by each customer

Solution 2

SELECT *
    FROM (
        SELECT
                *,
               RANK() OVER (PARTITION BY CustomerID ORDER BY OrderDate ASC) AS order_num
        FROM Orders
     ) AS RankedOrders
WHERE order_num = 1;

Solution 3

WITH RankedOrders AS (
    SELECT 
        *,
        RANK() OVER (PARTITION BY CustomerID ORDER BY OrderDate ASC) AS order_num
    FROM Orders
)
SELECT *
FROM RankedOrders
WHERE order_num = 1;

Explanation

While there are multiple ways to solve this problem, but most simple answer would be the solution 1. Wherein we have just took minimum on order date.


I hope this would have been helpful for you, consider sharing it with your friends. thank you.

Spread the love