Reputation: 123
I am writing a simple SQL
query to get the latest records for every customerid.
My SQL
query -
SELECT sub.customerid, sub.device_count, sub.date_time FROM(
SELECT customerid, cast(device_count as INT) as device_count, date_time,
RANK() OVER
(
PARTITION by customerid
ORDER BY date_time desc
) AS rownum
FROM tableA ) sub
JOIN tableB d on sub.customerid = d.customerid
WHERE rownum = 1
Sample data:
customerid | device_count | date_time |
---|---|---|
A | 3573 | 2021-07-26 02:15:09-05:00 |
A | 4 | 2021-07-26 02:15:13-05:00 |
A | 16988 | 2021-07-26 02:15:13-05:00 |
A | 20696 | 2021-07-26 02:15:13-05:00 |
A | 24655 | 2021-07-26 02:15:13-05:00 |
A | 10000 | 2021-07-25 02:15:13-05:00 |
A | 2000 | 2021-07-25 02:15:13-05:00 |
What I need is:
customerid | device_count | date_time |
---|---|---|
A | 4 | 2021-07-26 02:15:13-05:00 |
A | 16988 | 2021-07-26 02:15:13-05:00 |
A | 20696 | 2021-07-26 02:15:13-05:00 |
A | 24655 | 2021-07-26 02:15:13-05:00 |
But what I get after executing the above query is :
customerid | device_count | date_time |
---|---|---|
A | 4 | 2021-07-26 02:15:13-05:00 |
A | 16988 | 2021-07-26 02:15:13-05:00 |
I am not sure why the remaining rows are left out even though they have the same timestamp. Any help would be appreciated!
Upvotes: 0
Views: 264
Reputation: 1270361
The timestamp might have milliseconds that you are are not seeing.
You can truncate to the nearest second:
SELECT sub.customerid, sub.device_count, sub.date_time
FROM (SELECT customerid, cast(device_count as INT) as device_count, date_time,
RANK() OVER (PARTITION by customerid ORDER BY DATE_TRUNC(second, date_time) desc) AS rownum
FROM tableA
) sub JOIN
tableB d
ON sub.customerid = d.customerid
WHERE rownum = 1
Upvotes: 1