[英]SQL/PSQL function to get latest update from inner joined table
我有 2 個表: drivers
和drivers_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.