每组具有最大值的行

Rows with max value of each group

我正在尝试获取每组中具有最大值的行。

我有这个 tables

+-------+-----------+--------------+-----------+
|  nid  |     name  |   crated     | grp_id    |
+-------+-----------+--------------+-----------+
|  1    | RAND_NAME |     123      |        11 |
|  2    | EHllo     |     111      |        11 |
|  3    | Stop by   |     444      |        11 |
|  4    | Radr c    |     555      |        11 |
|  5    | NAE       |     666      |        22 |
|  6    | ABC       |     1234     |        22 |
|  7    | RAND      |     123      |        22 |
|  8    | YELLO     |     444      |        22 |
|  9    | AAA       |     555      |        33 |
|  10   | WWW       |     1235     |        33 |
|  11   | ADF       |     553      |        33 |
+-------+-----------+--------------+-----------+

所以,我想要这个 table

+-------+-------------+------------+-----------+
| nid   |     name    |  created   | grp_id    |
+-------+-------------+------------+-----------+
|   3   | Radr c      |   555      |        11 |
|   6   | ABC         |   1234     |        22 |
|  10   | WWW         |   1235     |        33 |
+-------+-------------+------------+-----------+

这意味着我想抓取每组中创造价值最高的行。 table 将按 grp_id 分组。

我是这样想的:

SELECT nid, name, created, grp_id
   FROM table t
   WHERE t.created = (SELECT MAX(t1.created) FROM table t1)
   GROUP BY grp_id
   ORDER BY grp_id

但是,没有成功。我应该怎么做才能得到每组创造价值最高的三个不同行?

感谢您理解我的拙劣解释。

您需要一个子选择:

SELECT yourtable.*
FROM yourtable
LEFT JOIN (
    SELECT grp_id, MAX(created) AS max
    FROM yourtable
    GROUP BY grp_id
) AS maxgroup ON (
    (yourtable.grp_id = maxgroup.grp_id) AND (yourtable.created = maxgroup.max)
)

subselect 获取每个组的 ID/max 值,并且 parent/outer 查询再次加入 subselect 结果以获取出现最大值的行的其余字段上。

尝试:

SELECT nid, name, MAX(created), grp_id FROM t GROUP BY grp_id;
SELECT nid, name, MAX(created), grp_id
FROM table
GROUP BY grp_id
order by MAX(nid);