我有一张这样的表
+---------------------+-------+-----+
| 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 |
+---------------------+-------+-----+
我想在两列上应用group by,但下面的查询对我不起作用
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 |
+---------------------+-------+-----+
任何人都可以帮我吗? 感谢
答案 0 :(得分: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)
)
答案 1 :(得分:0)
使用分组谓词时,所选值必须为
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无效。
答案 2 :(得分:0)
如果您希望两列都是唯一的,则可以使用GROUP或DISTINCT:
<强> DISTINCT 强>
SELECT DISTINCT dateTime, value FROM table
GROUP BY
SELECT dateTime, value FROM table GROUP BY dateTime, value
答案 3 :(得分:0)
你的问题不明确,所以让我这样问。
对于任何给定的日期/时间,存在多个条目,您需要第一次出现的值和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
答案 4 :(得分:0)
你可以试试这个
SELECT dateTime, max(value) FROM table GROUP BY dateTime
这将为每个不同的dateTime提供一行,其中包含该组dateTime的最大值。您可以使用max()的替代方法,例如min()或sum()。
如果不确切知道自己想要达到的目标,就很难给出更准确的答案。