Given an hourly table A with full records, e.g.:
x
User Hour Purchase
Joe 1 0
Joe 2 0
Joe 3 0
Joe 4 1
Joe 5 0
Joe 6 0
Joe 7 0
Joe 8 1
Joe 9 1
Joe 10 0
And a subset B of it, e.g.
User Hour Purchase
Joe 3 0
Joe 9 1
Joe 10 0
I want to keep only those records from A that are in B or at most 2hr behind the B subset, without duplication, e.g.
User Hour Purchase
Joe 1 0
Joe 2 0
Joe 3 0
Joe 7 0
Joe 8 0
Joe 9 1
Joe 10 0
How can the result be achieved with an inner join, without duplication (in this case the hours 8&9) and preserving the right purchase values for the hours in B? (This is an MWE, assume multiple users and timestamps instead of hours)
Advertisement
Answer
This is a simple INNER
join with the proper conditions in the ON
clause:
SELECT DISTINCT a.*
FROM a INNER JOIN b
ON b.User = a.User AND a.Hour BETWEEN b.Hour - 2 AND b.Hour
You can add a WHERE
clause if you want results for a specific user:
WHERE a.User = 'Joe'