代码之家  ›  专栏  ›  技术社区  ›  Agenobarb

最大值和最小值的时间戳

  •  0
  • Agenobarb  · 技术社区  · 6 年前

    我有一张下表:

       id    | product_id | price |         timestamp          
    ---------+------------+-------+----------------------------
     1263479 |          1 |  1100 | 2019-01-21 21:08:30.617791
      272859 |          1 |  1100 | 2018-12-01 11:31:40.746908
      139210 |          2 |  1100 | 2018-11-13 14:24:19.775732
      193796 |          2 |   880 | 2018-11-23 13:17:20.820132
    

    如何在一个查询中选择最小值(price)及其时间戳、最大值(price)及其时间戳?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tim Biegeleisen    6 年前

    你可以用 ROW_NUMBER 两次:

    WITH cte AS (
        SELECT id, product_id, price, timestamp,
            ROW_NUMBER() OVER (ORDER BY price) rn_min,
            ROW_NUMBER() OVER (ORDER BY price DESC) rn_max
        FROM yourTable
    )
    
    SELECT 'min' AS label, price, timestamp FROM cte WHERE rn_min = 1
    UNION ALL
    SELECT 'max', price, timestamp FROM cte WHERE rn_max = 1;
    

    如果你不想 min max 标签(价格本身给出哪一个是最小的,哪一个是最大的),那么你可以用这个:

    SELECT price, timestamp FROM cte WHERE rn_min = 1 OR rn_max = 1;