簡體   English   中英

PostgreSQL - 復雜查詢中兩行之間的日期差異

[英]PostgreSQL - Date difference between two rows in complex query

我有這個查詢:

SELECT apple, banana, update_at FROM 
(
    SELECT DISTINCT ON (apple) *
        FROM table
            WHERE apple IN ('ad', 'sa')

        ORDER BY apple, update_at DESC
) q

此查詢的目的是獲取包含apple "ad" 或 "sa" 的行,並返回最新更新的行 ( update_at (timestamp) )。 此查詢有效。

我的問題是我想要它而不是update_at列,查詢將顯示查詢匹配行的時間戳(持續時間)與其之前的行之間的差異。

示例:

apple---|banana---|update_at
============================
ad------|VAL------|2017-06-01 12:12:30
ad------|VAL------|2017-06-01 09:00:00
ad------|VAL------|2017-05-31 13:41:00

結果:

apple---|banana---|update_at
============================
ad------|VAL------|**03:12:30**

03:12:30 是持續時間。

希望說的夠清楚。

您需要為此使用窗口函數:

SELECT apple, 
       banana, 
       update_at, 
       prev_update_at, 
       update_at - prev_update_at as duration
FROM (
   SELECT *, 
          row_number() over (partition by apple order by update_at desc) as rn, 
          lag(update_at) over (partition by apple order by update_at) as prev_update_at
   FROM table
   WHERE apple IN ('ad', 'sa')
) q
where rn = 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM