0
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

私が使用しているデータベースの背景を少し説明します。数百万のレコードのリストから最も古い日付フィールドと最新の日付フィールドを取得しようとしています。

今週初めに私はこの質問を投稿しました:

3 つの MySQL クエリを 1 つに結合する方法は?

この質問は完全に回答されましたが、このタイプのクエリには当てはまりません。

4

7 に答える 7

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 構文

于 2012-09-20T17:54:08.897 に答える
1

max 関数と min 関数を使用するのが最善の方法だと思います。結果を 1 行として取得できます。

select min(gmt), max(gmt)
from history.cachemap

これは、データのパスが 1 つしかないため、最も効率的なソリューションです。

または、union all を使用して、これを 2 つの行に入れることができます。

select 'min' as which, min(gmt)
from history.cachemap union all
select 'max', max(gmt)
from history.cachemap

UNION/UNION ALL は指定された順序で行を返すわけではないため、どれがどれであるかに関する情報を含める (または明示的に並べ替える) 必要があります。

于 2012-09-20T17:58:32.173 に答える
1

これは、次のように単一のクエリで実行できます。

SELECT MIN(gmt), MAX(gmt) FROM history.cachemap
于 2012-09-20T17:58:34.857 に答える
1
select 
    (select min(gmt) from history.cachemap),
    (select max(gmt) from history.cachemap)
于 2012-09-20T17:55:49.590 に答える
1

より効率的な方法ですが、1 つではなく 2 つの列を返す方法は次のとおりです。

select MIN(gmt) AS mingmt, MAX(gmt) AS maxgmt
   FROM history.cachemap;

MySQL でインデックスを作成するgmtと、ほぼ瞬時に実行されるはずです。

于 2012-09-20T17:57:40.007 に答える
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;
于 2012-09-20T17:55:25.750 に答える
0

history.cachemap に何百万ものレコード (行) が含まれている場合は、おそらく

SELECT gmt FROM history.cachemap WHERE gmt = max(gmt) OR gmt = min(gmt) ...

そのようなもの..UNIONを使用すると、実際には同じクエリを2回実行し、同じテーブルに何百万ものレコードが含まれていることに注意してください..

于 2012-09-20T17:58:11.447 に答える