2014-02-12 116 views
0

tbl_contacts: -獲取最新的最新記錄從MySQL

user_id - int 
contact_id - int 
first_name - varchar 
last_name - varchar 
date_backup - TIMESTAMP 

我有大量的數據,我想獲得最新一個從數據庫中。

目前我具有2個不同的日期的數據中,1是2014年2月12日4時47分39秒,另一個是2014年1月12日4時47分39秒。我有共有125條記錄,其中5間2014年1月12日4時47分39秒的日期和休息是2014年2月12日4時47分39秒。我正在使用下面的查詢來獲取最新的日期數據,但它以某種方式返回所有數據。我努力了很久,無法成功實現我的目標。如果有人有任何想法,請幫助我。

查詢

SELECT `contact_id`, `user_id`, `date_backup`, `first_name`, `last_name` 
    FROM tbl_contacts WHERE `date_backup` IN (
    SELECT MAX(`date_backup`) 
     FROM tbl_contacts WHERE `user_id`= 1 GROUP BY `contact_id` 
) 
    ORDER BY `contact_id`ASC, `date_backup` DESC 

通過使用ORDER BY date_backup DESC,我在列表的末尾獲取舊數據。但是如果新的日期記錄可用,我只是不想要舊的日期記錄。

+0

嘗試找到。 –

+0

不工作,它仍然在最後顯示舊的記錄。 – Scorpion

回答

-2

只需在查詢結尾處添加LIMIT 1即可僅選擇第一行結果。

+0

我想要數據列表Nick不是單行。 – Scorpion

+0

好吧,那麼這已經在這裏回答了http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column – Nick

0

用戶MySqlUNIX_TIMESTAMP()ORDER BY子句。

SELECT `contact_id`, `user_id`, `date_backup`, `first_name`, `last_name` 
    FROM tbl_contacts WHERE `date_backup` IN (
    SELECT MAX(`date_backup`) 
     FROM tbl_contacts WHERE `user_id`= 1 GROUP BY `contact_id` 
) 
    ORDER BY UNIX_TIMESTAMP(`date_backup`) DESC, `contact_id`ASC 

如果需要更改的所有date_backupUNIX_TIMESTAMP(`date_backup`)

0

LIMIT會做在MySQL數據庫中招(其他數據庫中,很可能會TOP條款)。因此,使用LIMIT 10

SELECT TOP 1 `contact_id`, `user_id`, `date_backup`, `first_name`, `last_name` 
FROM tbl_contacts WHERE `date_backup` IN (
SELECT MAX(`date_backup`) 
    FROM tbl_contacts WHERE `user_id`= 1 GROUP BY `contact_id` 
) 
ORDER BY `contact_id`ASC, `date_backup` DESC 
LIMIT 10 

如果你想在最近的版本中。 `ORDER BY date_backup DESC,CONTACT_ID ASC`:

LIMIT子句中的指南可在MySQL reference

Similar kind of issue