Rap*_*tor 3 mysql sql select group-by
这是数据库表
???????????????????????????????????????????????
? id ? customer_id ? last_seen ? param ?
???????????????????????????????????????????????
? 1 ? 12345 ? 2012-08-01 12:00 ? 1 ?
? 2 ? 22345 ? 2012-08-01 12:00 ? 1 ?
? 3 ? 32345 ? 2012-08-01 12:00 ? 1 ?
? 4 ? 42345 ? 2012-08-01 12:00 ? 1 ?
? 5 ? 52345 ? 2012-08-01 12:00 ? 1 ?
? 6 ? 12345 ? 2012-09-01 12:00 ? 2 ?
? 7 ? 12345 ? 2012-10-01 12:00 ? 3 ?
???????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
idAUTO INCREMENT主键在哪里.
我想要实现的是获得每个记录的最后记录customer_id.预期结果 :
???????????????????????????????????????????????
? id ? customer_id ? last_seen ? param ?
???????????????????????????????????????????????
? 2 ? 22345 ? 2012-08-01 12:00 ? 1 ?
? 3 ? 32345 ? 2012-08-01 12:00 ? 1 ?
? 4 ? 42345 ? 2012-08-01 12:00 ? 1 ?
? 5 ? 52345 ? 2012-08-01 12:00 ? 1 ?
? 7 ? 12345 ? 2012-10-01 12:00 ? 3 ?
???????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
我试过这个SQL,但它返回错误的结果:
SELECT customer_id, param, last_seen
FROM `my_table`
GROUP BY customer_id
ORDER BY last_seen DESC
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
更新:表结构(输出DESC my_table)
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| customer_id | varchar(8) | NO | | NULL | |
| last_seen | datetime | NO | | NULL | |
| param | int(11) | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
子查询背后的想法是它分别获取last_seen每个子查询的最新值Customer_ID.然后,子查询的结果将与原始表连接,前提是必须满足条件:CustomerID和日期必须相互匹配.
SELECT a.*
FROM Customer a
INNER JOIN
(
SELECT Customer_ID, MAX(last_seen) maxDate
FROM Customer
GROUP BY Customer_ID
) b ON a.Customer_ID = b.Customer_ID AND
a.last_seen = b.maxDate
ORDER BY a.ID
Run Code Online (Sandbox Code Playgroud)
后续问题:请您检查last_seen记录ID 的值6是否正确?