-
1:ID:kt4AtM · 2週間前

#srk SQLでGROUP化する時、

AREA DATE
群馬 2019/1/1
群馬 2019/2/10
群馬 2018/3/4
鳥取 2017/10/29
鳥取 1999/4/8

GTOUP BY `AREA`
で グループ化 !

群馬 2018/3/4
鳥取 1999/4/8

とかになりますが、グループしたものの中でも
最新のものをとか、最大のものを
というふうに取ってくるにはどうすればいいでしょうか。

ググると、サブクエリを使って MAX関数等をいれるといけるみたいですが
レコード数 100件 200件では問題ないですが
10000件 20000件クラスになると 鬼重くなります。
(たぶんサブクエリが10000回 20000回実行されてる)

パフォーマンスも両立しながら上記の内容を実現するにはどうすれば良いでしょうか?
よろしくおねがいします。

7 件の回答

2:ID:fpBqsp · 1週間前

サブクエリを使わない。テーブルを見直す、JOINを使う。

3:ID:NtVN5P · 1週間前

AREAとDATEの列は同じテーブルにあるの?それなら、
select AREA, MAX(DATE)
FROM テーブル名
group by AREA
で取れるけど。

4:ID:Ye4lKy · 1週間前

サブクエリを使わず

select area, max(`date`) from テーブル名 group by area;

だけでイケる。

5:ID:Ye4lKy · 1週間前

Re:4
あ、かぶった・・・

6:ID:NtVN5P · 1週間前

あ、もしかして、GroupByした結果の中で、最大日付のを1レコードほしいのかな。
だとすると、
select top 1 AREA, max(DATE)
from テーブル名
group by AREA
order by max(DATE) desc
で取れるよ。

8:ID:NtVN5P · 1週間前

Re:6
↑はSQLServerだけど、Oracleなら
select * from(
select AREA, max(DATE)
from テーブル名
group by AREA
order by max(DATE) desc)
where ロウnum = 1
で取れると思うよ。
(whereの最後の一文字と、ロウで禁止ワードに引っかかったw)

1 件の回答が除外されました。[詳細]
コメントの受付は終了しました。

一緒に読まれている質問

ページ上部に戻る