0

我有一张这样的桌子

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

谁能帮我这个?谢谢

4

5 回答 5

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

SQLFiddle

于 2013-05-28T18:05:17.777 回答
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 是无效的。

于 2013-05-28T09:42:11.907 回答
0

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

清楚的

SELECT DISTINCT dateTime, value FROM table

通过...分组

SELECT dateTime, value FROM table GROUP BY dateTime, value
于 2013-05-28T09:54:47.017 回答
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
于 2013-05-28T11:41:07.077 回答
0

你可以试试这个

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

这将为每个不同的 dateTime 提供一行,其中包含该组 dateTime 的最大值。您可以使用 max() 的替代方法,例如 min() 或 sum()。

如果不确切知道您要达到的目标,就很难给出更准确的答案。

于 2013-05-28T12:18:12.073 回答