我在MySQL中有表格,比如thoose:
troll_id troll_family_id troll_name troll_birth_timestamp
--------------------------------------------------------------------
1 1 Kamil 100000
2 1 Bartek 200000
3 2 Maciek 100000
4 2 Andrzej 200000
troll_family_id troll_family_name
------------------------------------------
1 Trollowski
2 Trollowicz
我想要only one the youngest Troll from every famillies
所以我想得到这样的行:
troll.troll_name
-----------------
Bartek
Andrzej
我在数据库中有数百万的巨魔,我尝试过这样的查询:
SELECT troll.troll_name
FROM troll
GROUP BY troll.troll_family_id
ORDER BY troll.troll_birth_timestamp DESC
LIMIT 0, 50
但它冻结了我对http的回应。所以我甚至不知道,这个查询是否正确。
答案 0 :(得分:2)
试试这个:
SELECT a.troll_name
FROM troll a
INNER JOIN (SELECT troll_family_id, MAX(troll_birth_timestamp) AS troll_birth_timestamp
FROM troll
GROUP BY troll_family_id
) AS b on a.troll_family_id = b.troll_family_id AND a.troll_birth_timestamp = b.troll_birth_timestamp
LIMIT 0, 50
答案 1 :(得分:0)
轻微更改现有查询。 ORDER BY在GROUP BY之后起作用:
SELECT troll_family_name, t.troll_name
FROM
(
SELECT troll_family_name, t.troll_name
FROM troll t
JOIN troll_family tf ON tf.troll_family_id=t.troll_family_id
ORDER BY t.troll_birth_timestamp DESC
)temp
GROUP BY troll_family_name
LIMIT 0, 50
更多添加索引到tf.troll_family_id,t.troll_family_id
答案 2 :(得分:0)
您可以在群组
上使用MAX
功能
SELECT troll.troll_name, MAX(troll_birth_timestamp) AS troll_birth_timestamp
FROM troll
GROUP BY troll.troll_family_id
LIMIT 0, 50