[英]SQL : a GROUP BY issue in MySQL
這是數據庫表
╔════╦═════════════╦══════════════════╦═══════╗
║ 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 ║
╚════╩═════════════╩══════════════════╩═══════╝
其中id
是AUTO 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 ║
╚════╩═════════════╩══════════════════╩═══════╝
我試過這個SQL,但它返回錯誤的結果:
SELECT customer_id, param, last_seen
FROM `my_table`
GROUP BY customer_id
ORDER BY last_seen DESC
我在這里錯過了什么?
更新 :表結構( 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 | |
+--------------+--------------+------+-----+---------+----------------+
子查詢背后的想法是它分別獲取每個Customer_ID
的最新last_seen
值。 然后,子查詢的結果將與原始表連接,前提是必須滿足條件: 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
后續問題:請您檢查記錄ID 6
的last_seen
值是否正確?
這是一個SQLFiddle演示
在MySQL中,您可以這樣做:
select ID,CUSTOMER_ID,LAST_SEEN,PARAM from
(
select t.*,
if(@i=customer_id,0,1) isLast,
@i:=customer_id
from `my_table` t,(select @i:=0) t1
order by customer_id,last_seen desc
) t2 where isLAst=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.