Dec 25 2022 08:02 AM
Hi Everyone,
I have one sql problem to be solved
1. Image is the data
2.Image is the output that I should get.
You need to output the dates, when Couriers changed their phone numbers. You shouldn't output the first phone number of a courier
Through lead function I'm able to acheive, but I want to achieve it using joins
3. Image is the query that I used
4. Image is the output that I get
I'm not sure how to get the output, using the query that I used, I have stucked in between
Please help
Thanks,
Neha
Dec 26 2022 11:08 PM
Dec 30 2022 03:25 AM
No need for joins. What you want to find is the first date per courier/phonenumber, and then exclude the first phone number for every courier. This can be achieved with two differently partitioned ROW_NUMBER() expressions in a CTE and an outer query to filter for exactly this.
WITH CTE AS (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY courier_id,phone ORDER BY created_dt) as rn_courier_number,
ROW_NUMBER() OVER(PARTITION BY courier_id ORDER BY created_dt) as rn_courier
FROM courier_phone
)
SELECT
courier_id,
phone as new_phone,
created_dt as changed_dt
FROM
CTE
WHERE
rn_courier_number=1 AND rn_courier>1;