簡體   English   中英

MySQL按兩列分組

[英]MySQL group by on two columns

我有這樣的桌子

+---------------------+-------+-----+
|       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  |
+---------------------+-------+-----+

我想在兩列上應用分組依據,但以下查詢對我不起作用

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  |
+---------------------+-------+-----+

誰能幫我這個? 謝謝

如果您需要在兩列中都具有唯一值(排除具有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)
  )

SQLFiddle

使用分組謂詞時,選擇的值必須是

a)用於將結果分組的值

b)組函數(如SUMAVGCOUNT ..)

做類似的事情

SELECT dateTime, value FROM table GROUP BY dateTime, value  (order is not needed to be kept).

如果你做了類似的事情

SELECT dateTime, value FROM table GROUP BY value

您可以以一個表結尾,在該表中,到value = 1的行,您將有3或4個不同的dateTime值。 那不是表,因此SQL將無效。

如果希望兩列都唯一,則可以使用GROUP或DISTINCT:

不同

SELECT DISTINCT dateTime, value FROM table

通過...分組

SELECT dateTime, value FROM table GROUP BY dateTime, value

您的問題不夠清楚,所以讓我這樣問。

對於任何給定的日期/時間,存在多個條目,則需要其首次出現的值和ID。 您的示例輸出在:58和:59分鍾的輸入中沒有任何內容,因此我假設您不希望任何內容僅包含一條記錄。

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

現在,如果您希望根據VALUE值最低的日期/時間進行更改,則只需將上述查詢更改為

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

     ON PreQuery.MinValue = YT2.Value

你可以試試這個

SELECT dateTime, max(value) FROM table GROUP BY dateTime

這將為您為每個不同的dateTime提供一行,並為該組dateTime提供最大值。 您可以使用max()的替代項,例如min()或sum()。

如果不確切知道您要實現的目標,很難給出更准確的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM