Filtering SQL Results: Selecting Nearest Value per Group

I’m working with a database that has multiple connected tables. The query result looks like this:

CarId   CarLat   CarLon   Path   Minute   Distance
325     36.000   37.200   H4     74       250
344     36.050   37.040   H6     75       500
365     36.300   37.600   H4     76       750
311     36.060   37.080   H5     77       800

I need to filter this data so that for each unique Path, only the row with the smallest Minute value is shown. The desired output would be:

CarId   CarLat   CarLon   Path   Minute   Distance
325     36.000   37.200   H4     74       250
344     36.050   37.040   H6     75       500
311     36.060   37.080   H5     77       800

What’s the best way to achieve this? I’m not sure how to group by Path and select the row with the minimum Minute value for each group. Any help would be appreciated!

To solve your issue, I’d recommend using a window function, specifically ROW_NUMBER(). This approach is generally more efficient than subqueries, especially for larger datasets. Here’s the query you can use:

SELECT CarId, CarLat, CarLon, Path, Minute, Distance
FROM (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY Path ORDER BY Minute) as row_num
  FROM your_table
) t
WHERE row_num = 1;

This query partitions your data by Path, orders each partition by Minute, and selects only the first row (smallest Minute) for each Path. It’s efficient and works well across most modern database systems. Just ensure your database supports window functions before using this approach.

hm, interesting question! have u considered using a window function? something like ROW_NUMBER() could work well here. it’d let u rank rows within each Path group based on Minute. then u just pick the top-ranked row for each Path. what do u think about that approach? any specific database you’re using?

hey, you can use a subquery to get what u want. try this:

SELECT *
FROM your_table t1
WHERE Minute = (
SELECT MIN(Minute)
FROM your_table t2
WHERE t2.Path = t1.Path
)

this should give u the rows with smallest Minute for each Path. hope it helps!