2016-11-28 165 views
0

我有一個表存儲一些有關URL的報告,他們有一個像created_date這樣的字段。可以多次生成(並存儲)相同的報告,因爲這些值可能會更改。我怎樣才能獲得網址報告,但只有最新的?如何從MySQL獲取最新記錄?

我的表(page_report):

id INT PK 
url VARCHAR(255) 
created_date TIMESTAMP 

的樣本數據:

id url   created_date 
1  google.com 2016-11-01 
2  google.com 2016-11-05 
3  bing.com  2016-11-03 
4  bing.com  2016-11-06 

我需要:

id url   created_date 
1  google.com 2016-11-05 
2  bing.com  2016-11-06 

我到目前爲止有:

SELECT r1.* 
FROM page_report r1 
LEFT JOIN page_report r2 ON r1.url = r2.url AND r1.created_date < r2.created_date 
WHERE r2.url IS NULL; 

但它很慢。有沒有更好的方法?

希望我提前明確表示感謝!

+1

查詢馬克斯(CREATED_DATE)。 –

+0

如果URL更改......您如何知道哪些記錄與彼此有關? – xQbert

+0

Plz提供樣本數據和您的期望輸出。 – MasoodUrRehman

回答

0

我一直用這一個:

SELECT DISTINCT r1.url FROM page_report r1 
    LEFT JOIN page_report r2 ON r1.url = r2.url AND r1.created_date < r2.created_date 
    WHERE r2.url IS NULL; 
1

一種方法是通過某些ID /邏輯密鑰生成最大記錄的日期集。

如果我假設了一個名爲ID字段是網址分組機制...

SELECT T1.URL, T1.Created_Date 
FROM TableEName T1 
INNER JOIN (SELECT MAX(Created_Date) CD, ID 
      FROM TableName 
      GROUP BY ID) 
on T1.ID = T2.ID 
and T1.Created_Date = T2.CD 

這裏的技巧是我們怎麼知道「改變」的URL將它們具有相同的ID或其他一些隨着時間的推移會保持不變的屬性?

0

使用UNION ALL然後按url組合並且選擇MAX(created_date)

SELECT t.url, MAX(t.created_date) 
FROM (SELECT * FROM table1 UNION ALL SELECT * FROM table2) t 
GROUP BY t.url 

查看myql's UNION documentation瞭解詳情。

-1

創建最新創建日期的排名函數。像下面的東西。

​​