使用时间戳加入列,其中值最大

时间:2014-01-10 14:22:01

标签: postgresql

我有一张类似

的表格
+-------+-----------+
| value | timestamp |
+-------+-----------+

我正在尝试构建一个提供结果的查询,如

+-------+-----------+------------+------------------------+
| value | timestamp | MAX(value) | timestamp of max value |
+-------+-----------+------------+------------------------+

以便结果看起来像

+---+----------+---+----------+
| 1 | 1.2.1001 | 3 | 1.1.1000 |
| 2 | 5.5.1021 | 3 | 1.1.1000 |
| 3 | 1.1.1000 | 3 | 1.1.1000 |
+---+----------+---+----------+

但是我坚持用相应的时间戳加入列。

任何提示或建议? 提前谢谢!

有关详细信息(如果有帮助): 在实际项目中,max-values按月和日分组(使用group by子句,btw工作),但不知怎的,我不得不加入最大值的时间戳。

修改

交叉连接是一个好主意,但我希望按月分组,例如:

+---+----------+---+----------+
| 1 | 1.1.1101 | 6 | 1.1.1300 |
| 2 | 2.6.1021 | 5 | 5.6.1000 |
| 3 | 1.1.1200 | 6 | 1.1.1300 |
| 4 | 1.1.1040 | 6 | 1.1.1300 |
| 5 | 5.6.1000 | 5 | 5.6.1000 |
| 6 | 1.1.1300 | 6 | 1.1.1300 |
+---+----------+---+----------+

编辑2

我为一些示例数据和当前查询的示例添加了一个小提琴。 http://sqlfiddle.com/#!1/efa42/1

如何将相应的时间戳添加到最大值?

2 个答案:

答案 0 :(得分:2)

尝试使用两个子查询的交叉连接,第一个选择所有记录,第二个获得一行代表最大值的time_stamp,< 3;“1000-01-01”>例如。

SELECT col_value,col_timestamp,max_col_value, col_timestamp_of_max_value FROM table1
    cross join
      (
        select max(col_value) max_col_value ,col_timestamp col_timestamp_of_max_value  from table1
        group by col_timestamp
        order by max_col_value desc
        limit 1
      ) A --One row that represents the time_stamp of the max value, ie: <3;"1000-01-01">

答案 1 :(得分:-1)

使用与pg一起使用的窗口

 Select *, max( value ) over (), max( timestamp ) over() from table

它为您提供每行中所有值的最大值

http://www.postgresql.org/docs/9.1/static/tutorial-window.html