0

次のテーブルがあるとしましょう。

id  |  name  |  time
 1  |  Test  |  10
 2  |  Test  |  24
 3  |  Test  |  30
 4  |  ABCD  |  10
 5  |  ABCD  |  89
 6  |  EFGH  |  5
 7  |  WXYZ  |  5
 8  |  WXYZ  |  7
 9  |  Test  |  10
10  |  Test  |  24
11  |  EFGH  |  7

クエリで次の出力を取得したい:

name  |  min_time  |  max_time
Test  |        10  |        30
ABCD  |        10  |        89
EFGH  |         5  |         5
WXYZ  |         5  |         7
Test  |        10  |        24
EFGH  |         7  |         7

GROUP BYのようなものですが、歴史があります...

SELECT name, MIN(time), MAX(time)
FROM table
GROUP BY name
ODER BY id ASC

このクエリでは、すべての名前をグループ化するだけです...しかし、同じ名前が行の後または前にある場合にのみグループ化したいと思います。

誰かがこれを正確に行う方法を知っていますか?

4

1 に答える 1

1

これはそれを行う必要があります:

select name, min(time), max(time)
from (
select
name, 
time,
@group_num := if(@name != name, @group_num + 1, @group_num) AS group_number,
@name := name
from yourTable
, (select @group_num := 1, @name := NULL) variables
order by id
) sq
group by group_number
于 2013-09-13T22:33:37.983 に答える