这是一些测试数据。
+----+------+-------+---------+---------+
| id | type | param | enabled | account |
+----+------+-------+---------+---------+
| 1 | test | a | 1 | null |
| 2 | asdf | b | 1 | null |
| 3 | test | c | 1 | 34 |
| 4 | test | d | 0 | 34 |
| 5 | asdf | e | 1 | null |
+----+------+-------+---------+---------+
我想选择最新的行,其中"键入"和"帐户"是独一无二的。
例如,对于该测试表,我想要结果:
+----+------+-------+---------+---------+
| id | type | param | enabled | account |
+----+------+-------+---------+---------+
| 1 | test | a | 1 | null |
| 4 | test | d | 0 | 34 |
| 5 | asdf | e | 1 | null |
+----+------+-------+---------+---------+
我尝试过GROUP BY的变体:
SELECT * FROM test GROUP BY type, account
由于某种原因,这给了我:
+----+------+-------+---------+---------+
| id | type | param | enabled | account |
+----+------+-------+---------+---------+
| 1 | test | a | 1 | null |
| 4 | test | d | 1 | 34 | <- note that enabled is taking on an incorrect value.
| 5 | asdf | e | 1 | null |
+----+------+-------+---------+---------+
这样做的正确方法是什么?
答案 0 :(得分:2)
假设&#34;最新的行&#34;表示具有最大id
的那个,那么有几种方法。使用in
的方法是:
SELECT t.*
FROM test t
WHERE t.id IN (SELECT MAX(id) FROM test t2 GROUP BY type, account)
答案 1 :(得分:-1)
如果您的查询为您提供了正确的ID,您应该尝试将其放入子查询中:
SELECT * FROM test WHERE id IN (SELECT id FROM test GROUP BY type, account)