select gmt from history.cachemap order by gmt asc limit 0,1;
..this returns gmt: 2012-05-03
select gmt from history.cachemap order by gmt desc limit 0,1;
..this returns gmt: 2012-09-15
我正在使用的数据库的一些背景知识,我正试图从几百万条记录的列表中获取最早和最新的日期字段。
本周早些时候,我发布了这个问题:
How to combine three MySQL queries into one?
这个问题得到了很好的回答,但不适用于此类查询。
答案 0 :(得分:1)
(select gmt from history.cachemap order by gmt asc limit 0,1)
UNION
(select gmt from history.cachemap order by gmt desc limit 0,1)
文档:UNION syntax
答案 1 :(得分:1)
select
(select min(gmt) from history.cachemap),
(select max(gmt) from history.cachemap)
答案 2 :(得分:1)
更有效的方法,但返回两列而不是一列,将是:
select MIN(gmt) AS mingmt, MAX(gmt) AS maxgmt
FROM history.cachemap;
在gmt
上建立索引,在MySQL中,它应该是非常即时的。
答案 3 :(得分:1)
我认为最好的方法是使用max和min函数。您可以将结果作为一行获得:
select min(gmt), max(gmt)
from history.cachemap
这是最有效的解决方案,因为它只涉及一次数据传递。
或者,您可以使用union all:
将其分为两行select 'min' as which, min(gmt)
from history.cachemap union all
select 'max', max(gmt)
from history.cachemap
UNION / UNION ALL不会按指定的顺序返回行,因此您应该包含哪些信息(或明确命令)。
答案 4 :(得分:1)
这可以在单个查询中完成,如下所示:
SELECT MIN(gmt), MAX(gmt) FROM history.cachemap
答案 5 :(得分:0)
你可以这样做:
SELECT GMT FROM HISTORY.CACEMAP ORDER BY GMT DESC LIMIT 0,1 UNION SELECT GMT FROM HISTORY.CACEMAP ORDER BY GMT ASC LIMIT 0,1;
答案 6 :(得分:0)
如果history.cachemap包含数百万条记录(行),那么使用
可能会更好SELECT gmt FROM history.cachemap WHERE gmt = max(gmt) OR gmt = min(gmt) ...
类似的东西..注意,使用UNION你实际上对同一个表做了两次同样的查询,其中包含数百万条记录..