Home >Database >Mysql Tutorial >How to Select Distinct Rows Grouped by Minimum Value in a Database Table?

How to Select Distinct Rows Grouped by Minimum Value in a Database Table?

Susan Sarandon
Susan SarandonOriginal
2025-01-17 20:12:10245browse

How to Select Distinct Rows Grouped by Minimum Value in a Database Table?

Select unique rows grouped by minimum value

In the field of database operations, we often encounter the task of grouping data by the minimum value of a specific field while selecting unique rows. Let's say you have a table with multiple rows for each unique identifier, for example:

<code>| key_id | id | record_date | other_cols |
|---|---|---|---|
| 1 | 18 | 2011-04-03 | x |
| 2 | 18 | 2012-05-19 | y |
| 3 | 18 | 2012-08-09 | z |
| 4 | 19 | 2009-06-01 | a |
| 5 | 19 | 2011-04-03 | b |
| 6 | 19 | 2011-10-25 | c |
| 7 | 19 | 2012-08-09 | d |</code>

The goal is to retrieve one row from each unique id, representing the row with the smallest record_date.

A common approach is to use a subquery to identify the minimum record_date for each id and then join it back to the original table:

<code>SELECT *
FROM t
WHERE record_date = (SELECT MIN(record_date) FROM t WHERE id = t.id)</code>

However, this method cannot handle duplicate minimum record_date entries with the same id, which will result in multi-row results.

To solve this problem we need a solution that ensures unique rows. One such approach is to use an inner join and a derived table that calculates the minimum record_date for each id:

<code>SELECT mt.*     
FROM MyTable mt INNER JOIN
    (
        SELECT id, MIN(record_date) AS MinDate
        FROM MyTable
        GROUP BY id
    ) t ON mt.id = t.id AND mt.record_date = t.MinDate</code>

The inner join guarantees that only the rows with the minimum record_date for each id are selected, effectively producing a table of unique rows grouped by minimum value.

The above is the detailed content of How to Select Distinct Rows Grouped by Minimum Value in a Database Table?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn