[英]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)
)
使用分組謂詞時,選擇的值必須是
a)用於將結果分組的值
b)組函數(如SUM
, AVG
, COUNT
..)
做類似的事情
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.