在mysql中找到最低日期(自定义)

时间:2012-12-03 11:33:56

标签: php mysql sql

我不知道如何在日期类型中找到最低字符串

我将找到最低月份(按表格中的年份)

表名

Id  | M  | D  |   Y   |
=======================
1  | 01  | 22  | 2012 |
2  | 11  | 29  | 2012 |
3  | 12  | 30  | 2013 |
4  | 01  | 30  | 2011 | <--- this !
5  | 12  | 14  | 2012 |

PHP:

$sql = "SELECT * FROM TableName WHERE M=?? AND Y=??";
$selected = mysql_query($sql);

所以$selected会给出“4/01/30/2011”(Id,M,D,Y)等结果

任何?

8 个答案:

答案 0 :(得分:17)

SELECT min(concat(Y,M,D)) FROM TableName

答案 1 :(得分:11)

只需使用ORDER BY子句:

SELECT * FROM TableName
ORDER BY Y ASC, M ASC, D ASC

此处有更多信息:http://www.tizag.com/mysqlTutorial/mysqlorderby.php

答案 2 :(得分:9)

请帮自己一个忙,并使用date字段代替..你会为自己省去很多麻烦。

ALTER TABLE `TableName` ADD `date` DATE NOT NULL;
UPDATE `TableName` SET `date` = CONCAT( `Y` , '-', `M` , '-', `D` );

然后你就能做到:

SELECT MIN(`date`) FROM `TableName`

答案 3 :(得分:8)

user1533609的答案将为您提供正确的结果:

SELECT min(concat(Y,M,D)) 
  FROM `TableName`

但是这将无法使用任何日期的组成字段中的任何索引,因此必须访问表中的每一行以确定最小值。

结合m4t1t0和koopajah的答案会给你:

  SELECT * 
    FROM `TableName`
ORDER BY Y, M, D 
   LIMIT 1

这将能够在Y上使用可用的索引,甚至可以在(Y,M,D)上使用组合索引,它可以在更大的表上执行得更快。

所有这一切都说;对这个问题的回答几乎是犯罪,不建议使用日期字段而不是三列设置。我可以想到将日期列分开的唯一原因是在日常或月份需要单独索引的利基查询上的表现,但是接受的答案的选择向我表明情况并非如此。

正如Lucius指出的那样..如果是约会,请将其存储为日期并运行:

SELECT MIN(`DateColumnName`) FROM `TableName`

作为奖励,这将使您可以访问列上的所有MySQL时间函数,包括提取日期和月份的能力,格式化您喜欢的格式以及单个字段来索引和排序。

答案 4 :(得分:5)

只需按年,月和日执行查询排序,并将结果限制在第一行。

SELECT * FROM TableName ORDER BY Y, M, D ASC limit 1;

答案 5 :(得分:4)

试试这个:

SELECT MIN(ColumnName) FROM TableName;

在你的情况下,那将是:

SELECT MIN(Y) FROM TableName;

答案 6 :(得分:2)

我正在为您的查询提供一些建议。请遵循:

def test_one():
   """
   This is the test description.
   """
   assert pass

我希望它会帮助你

答案 7 :(得分:2)

SELECT concat(Y,M,D) FROM TableName
ORDER BY Y ASC, M ASC, D ASC
Limit 1

这样你可以通过用*替换“concat(Y,M,D)”来返回整行,并且很容易适应不同的用例。你可以,例如返回第一年内的最后一个日期行:

SELECT * FROM TableName
ORDER BY Y ASC, M DESC, D DESC
Limit 1

以DATETIME存储并使用本机MySQL排序可以加快速度。如果你需要保留单独的值(无论出于何种原因,例如导入/导出范围之外的其他系统),也许你可以在表中添加另一个值并同步值?