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

l2a*_*lba 11 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 |
Run Code Online (Sandbox Code Playgroud)

PHP:

$sql = "SELECT * FROM TableName WHERE M=?? AND Y=??";
$selected = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

所以$selected会得到像"4/01/30/2011"(Id,M,D,Y)的结果

任何 ?

bug*_*s94 17

SELECT min(concat(Y,M,D)) FROM TableName
Run Code Online (Sandbox Code Playgroud)


koo*_*jah 11

只需使用以下ORDER BY条款:

SELECT * FROM TableName
ORDER BY Y ASC, M ASC, D ASC
Run Code Online (Sandbox Code Playgroud)

更多信息请访问:http://www.tizag.com/mysqlTutorial/mysqlorderby.php


Luc*_*ius 9

拜托,帮自己一个忙,date而不是使用一个领域......你将为自己省去很多麻烦.

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

然后你就能做到:

SELECT MIN(`date`) FROM `TableName`
Run Code Online (Sandbox Code Playgroud)


Art*_*rth 8

user1533609的答案会给你正确的结果:

SELECT min(concat(Y,M,D)) 
  FROM `TableName`
Run Code Online (Sandbox Code Playgroud)

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

结合m4t1t0和koopajah的答案给你:

  SELECT * 
    FROM `TableName`
ORDER BY Y, M, D 
   LIMIT 1
Run Code Online (Sandbox Code Playgroud)

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

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

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

SELECT MIN(`DateColumnName`) FROM `TableName`
Run Code Online (Sandbox Code Playgroud)

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


m4t*_*1t0 5

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

SELECT * FROM TableName ORDER BY Y, M, D ASC limit 1;
Run Code Online (Sandbox Code Playgroud)