0

次のようなデータベーステーブルがあります。

id     date                     value    minute
1      20100201 00:00:01.909    xxx      0   
2      20100201 00:00:02.408    xxx      0
3      20100201 00:01:02.412    xxx      1 
4      20100201 00:01:02.909    xxx      1 
5      20100201 00:01:02.921    xxx      1   
6      20100201 00:01:02.955    xxx      1
7      20100201 00:02:01.903    xxx      2
8      20100201 00:02:25.332    xxx      2
9      20100201 00:03:12.003    xxx      3
10     20100201 00:04:12.003    xxx      4

...

結果を次のようにしたい:

id    date                      value1   minute
1      20100201 00:00:01.909    xxx      0   
2      20100201 00:00:02.408    xxx      0
3      20100201 00:01:02.412    xxx      1
6      20100201 00:01:02.955    xxx      1
7      20100201 00:02:01.903    xxx      2
8      20100201 00:02:25.332    xxx      2
9      20100201 00:03:12.003    xxx      3

私はそれを照会して、毎分の最初と最後の数字でIDを返し、1つしか存在しない場合は1分あたり1レコードを返します(上記のID 1,2,3,6,7,8,9)。

ID ASC で並べ替えてグループを使用しようとしましたが、分単位でグループ化しましたが、グループ化された後に並べ替えられているように見えるため、これは機能しません。

誰でもアイデアはありますか?できないなんて信じられない!

4

1 に答える 1

0

このクエリを試してください -

SELECT t1.* FROM test_table t1
  JOIN (
    SELECT MIN(id) min_id, MAX(id) max_id FROM test_table
      GROUP BY TIME_TO_SEC(TIME(date)) DIV 60) t2
  ON t1.id = t2.min_id OR t1.id = t2.max_id

datefield が DATETIME または TIMESTAMP でない場合、GROUP BY を変更する必要があります。また、正確な分でグループ化することをお勧めします (例: 年、day_of_year、minute_of_day でグループ化)。

于 2012-05-30T13:27:11.487 に答える