两列上的MySQL分组依据

两列上的MySQL分组依据,mysql,sql,Mysql,Sql,我有一张这样的桌子 +---------------------+-------+-----+ | 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

我有一张这样的桌子

+---------------------+-------+-----+
|       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  |
+---------------------+-------+-----+
我想在两列上应用GROUPBY,但下面的查询对我不起作用

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  |
+---------------------+-------+-----+
有人能帮我吗?
感谢使用分组谓词时,所选值必须为

用于对结果进行分组的值

b组函数,如总和、平均值、计数

做点像

SELECT dateTime, value FROM table GROUP BY dateTime, value  (order is not needed to be kept).
SELECT dateTime, value FROM table GROUP BY value
如果你做了类似的事情

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

您可以以一个表结束,其中,对于值为1的行,您将有3个或4个不同的日期时间值。而且这不是一个表,因此SQL将无效。

如果希望两列都是唯一的,可以使用GROUP或DISTINCT:

明显的

从表中选择不同的日期时间、值 分组


你的问题不够清楚,所以让我这样问

对于任何给定的日期/时间,如果存在多个条目,则需要它第一次出现时的值和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
现在,如果希望基于具有最低值的日期/时间进行查询,则只需将上述查询更改为

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

你可以试试这个

按日期时间从表组中选择dateTime、maxvalue

这将为每个不同的dateTime提供一行,该dateTime组的最大值为。您可以使用“最大”的替代项,例如“最小”或“求和”


如果不确切知道您想要实现什么,就很难给出更准确的答案。

如果您需要在两列中都有唯一的值,请排除在前几行中返回了日期时间或值的行,请尝试此查询

从测试a中选择a.datetime、a.value、a.id 不存在的地方 从测试b中选择1 其中b.id你期望的输出是什么?只是想了解一下,你希望两者都是唯一的,或者你希望它们一起是唯一的?你有什么问题?它不是按照您期望的方式分组吗?可能是日期时间列。我希望两列都是唯一的…这并不重要。。。。如果我第一次出现dateTime或value就可以了…顺便说一句,如果您先检查SQL控制台错误,您可以更快地找到此信息。当我在单列上使用“分组依据”时,它工作正常,但当我在两列上使用它时,它不会在任何列上应用“分组”…它将两列都分组,因此,您将得到这两列的所有不同组合。由于没有重复日期时间和值的行,您将返回原始表。是的,您是对的,但我不希望发生这种情况。。。。我已经在我的问题中声明,我希望每个专栏都是独一无二的。。。它不应该返回任何重复的dateTime或任何重复的值…您不能仅使用select来执行此操作。执行两个查询,每列一个,使用DISTINCT关键字。更正:您可以使用DISTINCT。GROUP BY不适合此用途。但是,这些查询具有不同的语义,但将返回相同的结果。在那个特殊情况下没有区别。