簡體   English   中英

SQL/PSQL function 從內部聯接表獲取最新更新

[英]SQL/PSQL function to get latest update from inner joined table

我有 2 個表: driversdrivers_locations 我想在drivers表中創建一個計算字段,該字段返回驅動程序的最后插入位置。

drivers_locations表有以下列:

- id: uuid
- driver_id: uuid
- location: geography
- timestamp: bigint

timestamp是自 unix 紀元以來的毫秒數。 (例如 1673129623999)。

這是我在實現這一目標時失敗的失敗嘗試:

CREATE OR REPLACE FUNCTION public.fn_driver_last_location(driver_row drivers)
    RETURNS geometry
 LANGUAGE sql
 IMMUTABLE
AS $function$
    SELECT loc.location 
    FROM driver_locations loc
    inner join drivers drv
    on loc.driver_id  = drv.id
    group by loc.location_recorded_time_unix, loc.location, drv.id
    HAVING loc.location_recorded_time_unix = MAX(loc.location_recorded_time_unix) and drv.id = driver_row.id;
$function$
;;

有任何想法嗎?

您可以按時間對位置進行排序並將結果限制為一行。 您也不需要加入。

CREATE OR REPLACE FUNCTION public.fn_driver_last_location(driver_row drivers)
 RETURNS geometry
 LANGUAGE sql
 STABLE
AS $function$
    SELECT loc.location
    FROM driver_locations loc
    where loc.driver_id = driver_row.id
    order by loc.location_recorded_time_unix desc 
    limit 1;
$function$
;

從數據庫表中選擇的 function 永遠不應聲明為immutable的,因為即使使用相同的參數調用它也可能返回不同的結果。

暫無
暫無

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

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