How can i retrieve a data from query that has multiple the same data?. Something like this. I have a data representation like this:
Id Time Status ------------------------------------- 1 2019-09-09 09:00:00 1 2 2019-09-09 09:02:36 1 3 2019-09-09 09:06:00 1 4 2019-09-09 09:10:11 1 5 2019-09-09 17:00:00 2 6 2019-09-09 17:05:00 2 7 2019-09-10 09:00:00 1 8 2019-09-10 09:02:32 1 9 2019-09-10 09:02:38 1 10 2019-09-10 17:00:00 2 11 2019-09-10 17:00:30 2
Now i want to return something like these with parameter where date = 2019-09-09 :
1 2019-09-09 09:00:00 1 5 2019-09-09 17:00:00 2
i want to return the first data that was inserted.
Advertisement
Answer
Using ROW_NUMBER:
SELECT id, Time, Status
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY Status ORDER BY Time) rn
FROM yourTable
WHERE Time >= '2019-09-09' AND Time < '2019-09-10'
) t
WHERE rn = 1
ORDER BY Status;
If you are using a version of MySQL earlier than 8+, then use:
SELECT t1.id, t1.Time, t1.Status
FROM yourTable t1
INNER JOIN
(
SELECT Status, MIN(Time) AS min_time
FROM yourTable
WHERE Time >= '2019-09-09' AND Time < '2019-09-10'
GROUP BY Status
) t2
ON t1.Status = t2.Status AND t1.Time = t2.min_time
WHERE
t1.Time >= '2019-09-09' AND t1.Time < '2019-09-10'
ORDER BY
t1.Status;