【问题标题】:Sql DISTINCT remove column from resultSql DISTINCT 从结果中删除列
【发布时间】:2016-06-14 12:04:56
【问题描述】:

我有简单的 PostgreSQL 查询,按最近日期查询事件,但是 我想从结果中删除这个不同的列(时间)

SELECT DISTINCT time, sensor_id, event_type, value from events ORDER BY sensor_id

+---------------------+---+---+-----+
| 2014-02-13 12:42:00 | 2 | 2 |   5 |
| 2014-02-13 13:19:57 | 2 | 4 | -42 |
| 2014-02-13 13:32:36 | 2 | 3 |  54 |
| 2014-02-13 14:48:30 | 2 | 2 |   2 |
| 2014-02-13 12:54:39 | 3 | 2 |   7 |
+---------------------+---+---+-----+

需要这样的结果

+---+---+-----+
| 2 | 2 |   5 |
| 2 | 4 | -42 |
| 2 | 2 |   2 |
| 2 | 3 |  54 |
| 3 | 2 |   7 |
+---+---+-----+ 

【问题讨论】:

    标签: sql postgresql greatest-n-per-group


    【解决方案1】:

    您可以使用 PostgreSQL DISTINCT ON (...) 功能:

    SELECT DISTINCT ON (time, sensor_id, event_type, value)
           sensor_id, event_type, value from events
    ORDER BY sensor_id;
    

    【讨论】:

      【解决方案2】:

      我想你的意思是这样的:

      SELECT sensor_id, event_type, value 
      from   (
                SELECT DISTINCT time, sensor_id, event_type, value from events
             ) A 
      ORDER BY sensor_id
      

      【讨论】:

      • 此 sql 代码不按最近日期排序结果。
      • @Swapnil,没错,这不是必需的,并且在原始查询中没有以这种方式排序。此外,这是不可能的,你不能对你没有的东西进行排序。
      【解决方案3】:

      您可以使用聚合函数按时间最大值排序。

      SELECT  sensor_id, event_type, value
      FROM events 
      GROUP BY sensor_id, event_type, value
      ORDER BY MAX(time) DESC
      

      【讨论】:

      • 我需要按“时间”列查询最新事件
      • @ZarahDewayne 这个 sql 确保选择不同的值而不在输出中包含时间。在这种情况下,内联查询将不起作用,因为它们不能保证外部查询中的记录符合预期的顺序。
      【解决方案4】:

      使用CTE 和排名window 函数

        with temp as
          ( select time,sensor_id, event_type, value , rank() OVER (PARTITION BY     ensor_id, event_type, value order by 'time') as rnk
             )
             select time,sensor_id, event_type, value from temp  where rnk =1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 2015-04-26
        • 2021-04-01
        • 2015-12-19
        • 1970-01-01
        相关资源
        最近更新 更多