When the data having same date( even the micro second ) like below table.
If I There is a table below
Create_At | User_ID | Balance |
---|---|---|
2022-09-29 09h:09:01.761335 | 4 | 200300 |
2022-09-30 12h:09:47.405520 | 6 | 58111 |
2022-09-30 12h:09:47.405520 | 6 | 53861 |
2022-09-29 11h:09:46.276274 | 6 | 79011 |
I would like to get the latest record per user ID.
When I try to sort the Create_At column by descending order as follow,
SELECT * FROM Balance_Table ORDER BY Create_AT Desc;
What is the logic behind this sorting?
2
Answers
Your current query is just sorting the entire table on the created at time. You could use the following
LIMIT
query to find the single most recent record:But, this would just return a single user’s records. Instead, what you want to be using here on MySQL 8+ is
ROW_NUMBER
:Given that some users have more than one record as tied for the latest, it might make more sense to use
RANK()
, instead ofROW_NUMBER()
, and report all ties.SELECT * FROM table ORDER BY score DESC
Above query ordering the data only by the score. If you want to order the data by another field as you mentioned, you have the add that field also to the query as below. You have mentions that you want to order by name in acceding order (C > D >E). So I used ORDER BY ASC. Below query will give you the output that you requested.
SELECT * FROM table ORDER BY score DESC, name ASC