[英]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.