每组具有最大值的行
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);
我正在尝试获取每组中具有最大值的行。
我有这个 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);