0

このようなテーブルがあります

+---------------------+-------+-----+
|       dateTime      | value |  id |
+---------------------+-------+-----+
| 2013-04-06 06:54:00 |  2.5  |  1  |
| 2013-04-06 06:55:00 |  2.9  |  2  |
| 2013-04-06 06:56:00 |  2.4  |  3  |
| 2013-04-06 06:57:00 |  2.6  |  4  |
| 2013-04-06 06:58:00 |  2.5  |  5  |
| 2013-04-06 06:59:00 |  2.6  |  6  |
| 2013-04-06 06:54:00 |  2.8  |  7  |
| 2013-04-06 06:55:00 |  2.5  |  8  |
| 2013-04-06 06:56:00 |  2.1  |  9  |
+---------------------+-------+-----+

2 つの列にグループ化を適用したいのですが、以下のクエリが機能しません

SELECT * FROM table GROUP BY dateTime, value

両方の列から異なる値が必要です。私もこれを試しましたが、これも機能しません

SELECT distinct(dateTime),value,id FROM table GROUP BY value

各列を一意にしたい。私の望ましい出力は

+---------------------+-------+-----+
|       dateTime      | value |  id |
+---------------------+-------+-----+
| 2013-04-06 06:54:00 |  2.5  |  1  |
| 2013-04-06 06:55:00 |  2.9  |  2  |
| 2013-04-06 06:56:00 |  2.4  |  3  |
| 2013-04-06 06:57:00 |  2.6  |  4  |
+---------------------+-------+-----+

誰でもこれで私を助けることができますか?ありがとう

4

5 に答える 5

1

両方の列に一意の値が必要な場合 (dateTime または前の行で返された値を持つ行を除外する)、このクエリを試してください。

SELECT a.datetime, a.value, a.id FROM test a
WHERE NOT EXISTS
  (
     SELECT 1 FROM test b 
     WHERE b.id < a.id
       AND (a.datetime = b.datetime OR b.value = a.value)
  )

SQLフィドル

于 2013-05-28T18:05:17.777 に答える
0

あなたの質問は明確さに欠けているので、このようにさせてください。

複数のエントリが存在する任意の日付/時刻について、最初に発生したときの値と ID が必要です。サンプル出力には、:58 および :59 分のエントリが含まれていないため、レコードが 1 つしかないことは望ましくないと思います。

select
      YT2.dateTime,
      YT2.value,
      YT2.ID
   from
      ( select YT.dateTime, min(YT.id) MinID
           From YourTable YT
           group by YT.dateTime
           having count(*) > 1 ) as PreQuery
      JOIN YourTable YT2
         ON PreQuery.MinID = YT2.ID
        AND PreQuery.dateTime = YT2.dateTime

ここで、値が最も低い日付/時刻に基づいて取得したい場合は、上記のクエリを次のように変更するだけで済みます。

  ( select YT.dateTime, min(YT.Value) MinValue

     ON PreQuery.MinValue = YT2.Value
于 2013-05-28T11:41:07.077 に答える