选择具有最新日期的所有(不同数量的)行

时间:2015-10-09 00:07:26

标签: mysql

包含以下数据的MySQL数据库:

project_id | updated             | next_steps 
1          | 2014-08-01 03:19:20 | new_com         
2          | 2014-08-12 03:20:34 | NULL            
3          | 2014-08-12 07:01:12 | NULL            
4          | 2014-08-05 09:25:45 | comment        

我想在“更新”列中选择最新日期的所有行。应忽略小时/分钟的差异。我希望从这个例子得到第2行和第3行,如下所示:

2          | 2014-08-12 03:20:34 | NULL            
3          | 2014-08-12 07:01:12 | NULL

当然,对于真实表格,每天更改符合我标准的行数,数字可以是100,200,324等(它不是固定数字)。我尝试了以下代码并始终出错。

SELECT * FROM `table` WHERE updated LIKE %DATE(MAX(updated))%;

SELECT * FROM `table` WHERE updated LIKE %CAST(DATE(MAX(updated)) AS CHAR)%;

错误讯息是

  

“#1064 - 您的SQL语法出错;请查看与您的MySQL服务器版本对应的手册,以便在'%CAST(DATE(MAX(已更新))AS CHAR附近使用正确的语法%LIMIT 0 ,30'在第1行“

3 个答案:

答案 0 :(得分:2)

您需要使用WHERE查询并使用DATE(x)计算没有时间的最大日期,然后选择具有该日期的所有值,而不是时间。

试试这个:

SELECT * FROM `table` WHERE DATE(`updated`) = (SELECT MAX(DATE(`updated`)) FROM `table`)

如果你还想要他们订购

SELECT * FROM `table`
WHERE DATE(`updated`) = (SELECT MAX(DATE(`updated`)) FROM `table`) ORDER BY `updated` DESC

快乐的编码!

答案 1 :(得分:2)

SELECT MAX(DATE(updated)) FROM table(这会返回2014-08-12)将此作为子查询使用。这会返回最大日期。例如:SELECT * FROM table WHERE DATE(updated) = (SELECT MAX(DATE(updated)) FROM table)子查询返回所需的最大日期,之后您可以查询正确的行。这将返回在最大日期更新的所有行。

答案 2 :(得分:0)

如果你想要两个数据,

nse