2011-06-16 89 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

另外,请注意,如果表中有许多条目,比如说一百万行,上述查询可能运行缓慢。

让我知道如果上面是你愿意问的查询。

相关问题