首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mysql中查找最低日期(自定义)

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

Stack Overflow用户
提问于 2012-12-03 11:33:55
回答 8查看 1.6K关注 0票数 11

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

我只会找到最低的月份(按年数计算)

TableName

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
$sql = "SELECT * FROM TableName WHERE M=?? AND Y=??";
$selected = mysql_query($sql);

所以$selected应该给我一个类似于"4/01/30/2011“的结果(Id,M,D,Y)

有吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-03-29 10:44:43

问题94的回答会给你正确的结果:

代码语言:javascript
运行
复制
SELECT min(concat(Y,M,D)) 
  FROM `TableName`

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

结合m4t1t0和koopajah的回答,您可以看到:

代码语言:javascript
运行
复制
  SELECT * 
    FROM `TableName`
ORDER BY Y, M, D 
   LIMIT 1

这将能够在Y上使用可用索引,甚至可以在(Y,M,D)上使用组合索引,后者在大型表上的执行速度要快得多。

所有这些都是这么说的;对这个问题的回答不建议使用日期字段而不是您的三列设置,这几乎是犯罪行为。我能想到的分离日期列的唯一原因是,对于需要在日或月分别索引的小众查询的性能,但接受答案的选择表明情况并非如此。

正如卢修斯指出的..。如果是日期,将其存储为日期并运行:

代码语言:javascript
运行
复制
SELECT MIN(`DateColumnName`) FROM `TableName`

更重要的是,这将允许您访问列中的所有MySQL时态函数,包括提取日期和月份、按您喜欢的格式设置它的功能,以及一个可以索引和排序的字段。

票数 10
EN

Stack Overflow用户

发布于 2012-12-03 11:37:50

代码语言:javascript
运行
复制
SELECT min(concat(Y,M,D)) FROM TableName

编辑:这看起来很漂亮,很干净,但是这是一个非常糟糕的答案,所以请使用这个answer

票数 17
EN

Stack Overflow用户

发布于 2012-12-03 11:38:46

只需使用ORDER BY子句:

代码语言:javascript
运行
复制
SELECT * FROM TableName
ORDER BY Y ASC, M ASC, D ASC

更多信息在这里:http://www.tizag.com/mysqlTutorial/mysqlorderby.php

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13682384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档