簡體   English   中英

Postgres Sql查詢30分鍾左右的時間戳中沒有記錄

[英]Postgres Sql query for no of records within a time stamp around 30 min

我正在嘗試編寫一個Postgres sql,它將在特定時間戳記的30分鍾內為我提供航班。

我的SQL看起來像:

“從lk_merger中選擇計數(distinct(gufi))作為No_of_planes,其中a(on.actual-(a.on_actual-(20 *間隔'1分鍾'))和(a.on_actual +(40 *間隔'1分鍾')之間的a.on_actual ))按a.on_actual分組”

請建議如何獲得那些飛機。

我的桌子上有gufi作為飛機ID,on_actual_timelanding。

我有什么:gufi(plane_id),時間
3432343,12:33:89
2565656,12:44:45
3242234,1:05:23

輸出應類似於,在時間戳前后20分鍾內會有一個新列建議no_of_planes_around

Gufi(plane_id),時間戳,飛機數
3432343,12:33:89,1
2565656,12:44:45,2
3242234,1:05:23,1

如果沒有自我加入,請提出一些建議。

謝謝愛八木

如果將COUNT()用作窗口函數,則無法使用COUNT(DISTINCT ...),如果嘗試將其顯示為錯誤“ 0A000:窗口函數未實現DISTINCT”。 因此,要用不同的方式計算此計數,並在輸出的每一行上輸出,我建議使用CROSS JOIN LATERAL。

請注意,在您的小型數據示例中,我不確定是1:05:23 = 01:05:23還是13:05:23,因此我將兩者都包括在內。

CREATE TABLE mytable(
   plane_id   INTEGER  NOT NULL 
  ,plane_time TIME NOT NULL
)
\\
INSERT INTO mytable(plane_id,plane_time) VALUES (3432343,TO_TIMESTAMP('12:33:89', 'HH24:MI:SS')::TIME)\\
INSERT INTO mytable(plane_id,plane_time) VALUES (2565656,TO_TIMESTAMP('12:44:45', 'HH24:MI:SS')::TIME)\\
INSERT INTO mytable(plane_id,plane_time) VALUES (3242234,TO_TIMESTAMP('01:05:23', 'HH24:MI:SS')::TIME)\\
INSERT INTO mytable(plane_id,plane_time) VALUES (3242234,TO_TIMESTAMP('13:05:23', 'HH24:MI:SS')::TIME)\\

select * 
from mytable t1
cross join lateral (
    select count(distinct plane_id) No_of_planes_around
    from mytable t2 
    where t2.plane_time between t1.plane_time - interval '20 minutes' and t1.plane_time + interval '40 minutes'
    --and t1.plane_id <> t2.plane_id
    ) cjl
\\

另外,我不確定該計數是否應包括當前行的平面,因此我將其包括在內,但是可以通過在查詢中將行“和t1.plane_id <> t2.plane_id”激活來排除它。

暫無
暫無

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

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