我有一個PostgreSQL函數find_all_records_with_params()
,它返回一個SETOF records
。該記錄表有以下幾列:PostgreSQL:如果存在條件選擇所有行,否則忽略條件並選擇最早的行
table records(
id integer,
type integer,
created date,
content text
);
我想選擇所有記錄,其中current_date - created
大於90天。但是,如果此查詢不存在,我想選擇最早的created
日期的1條記錄。
我試圖用遞歸cte(下面顯示)來做到這一點,但它不允許if/else邏輯。我試圖避免調用find_all_records_with_params()
函數兩次,如果可能的話,我不希望創建臨時表。
with most_records as (select * from find_all_records_with_params()),
filtered_records as (select * from most_records where current_date - created > 90)
if exists(select * from filtered_records) then
select * from filtered_records;
else
select * from most_records order by created asc limit 1;
end if;
'current_date - created> 90' - 這很醜陋。爲什麼不'創建
@DavidAldridge會在'current_date - created'上執行'current_date - 90'的性能優勢嗎?它緩存該值嗎? –
它允許優化器使用索引,但是它更容易閱讀 - 我已經寫了25年的SQL,但是把'current_date - created> 90'放在了我的面前,我必須認真思考那是什麼意思。 –