2011-06-16 60 views
0

。我想要做的是從我的數據庫中檢索記錄並顯示所有內容,但條件不是顯示具有相同task_id的所有記錄,而只顯示其中最新的記錄。如何在具有相同task_id的記錄中選擇最新的?從數據庫中檢索記錄沒有相同的ID

+0

請分享您的表格定義,它可以幫助我們給您一個查詢或指向一個正確的方向。另外,給我們什麼你也嘗試過。 – 2011-06-16 04:41:14

回答

0

你需要像

last_modified TIMESTAMP 

所以每一個行插入或更新時,last_modified列獲取與當前時間戳更新一列。然後,你需要的是像

SELECT * 
    FROM tblTask 
WHERE task_id = n 
ORDER BY last_modified DESC 
LIMIT 5 

將從給定task_id數據庫中讀取最新更新5個任務的查詢。刪除WHERE子句以獲取最新任務,而不管task_id

:在TIMESTAMP數據類型是特殊的,在這個意義上,MySQL將自動更新域,默認情況下,爲當前的時間戳,除非值是在插入或更新查詢明確定義。如果不需要此行爲,請使用DATETIME,但它需要您爲新列指定列值(除非表中設置了默認值)

1

如果您有一個日期字段(實際上是時間戳)在你的數據庫ü可以使用group byorder by做的工作:

SELECT * FROM TBL GROUP BY task_id ORDER BY date DESC

+0

上述查詢不會給出正確的結果,因爲GROUP BY將始終選擇第一個不一定是最新的task_id記錄。例如,假設表中包含以下條目: task_id |時間\ n 1 | 2011-06-16 11:05:10 2 | 2011-06-16 12:11:46 1 | 2011-06-16 12:50:29 現在,GROUP BY後的結果爲: 1 | 2011-06-16 11:05:10 2 | 2011-06-16 12:11:46 即使在ORDER BY之後,它也不會給你想要的結果,因爲它只會對上面的記錄進行排序。但需要的是「2011-06-16 12:5-0:29」for task_id = 1 – Abhay 2011-06-16 13:10:58

+0

對不起,我上面的評論混亂,但我無法幫助格式化 – Abhay 2011-06-16 13:34:42

0

對於MySQL TIMESTAMP這是很好的做法,指定默認和更新操作

last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
0

@rahim阿斯卡里

如果你想只列出有一個以上的記錄,然後

SELECT * FROM TBL GROUP BY HAVING TASK_ID計數的任務(TASK_ID)> 1個ORDER BY日期DESC

0

這是您的解決方案:

SELECT * 
FROM 
(
    SELECT * 
    FROM `your_table` 
    ORDER BY `task_time` DESC 
) `TT` 
GROUP BY `TT`.`task_id`; 

請注意,在上面的查詢與你的表名和task_idtask_time與各自的ID和時間列改變,your_table

另外,請注意,如果表中有許多條目,比如說一百萬行,上述查詢可能運行緩慢。

讓我知道如果上面是你願意問的查詢。

相關問題