似乎表中沒有主鍵。 請勿將字段名稱用作類型名稱,如「DATE」。
無論如何,這裏是一個例子如何做到你想要的,沒有聲稱它是最好的。
請注意,如果有很多記錄,此過程將會很慢,因此請確保放置了正確的索引。
SET TERM^;
create or alter procedure TEMP_TEST_PROC (
IDATE date)
returns (
OID varchar(4),
DATE_BEFORE date,
DATE_AFTER date,
CLOSEST_DATE date,
OTEXT varchar(32))
as
begin
for select distinct id from test_table_wo_pk
into :oid
do
begin
date_before = null;
date_after = null;
/* get closest past date*/
select first 1 t."DATE" from test_table_wo_pk t
where ((t."DATE" <= :idate) and (t.id = :oid))
order by t."DATE" desc
into
:date_before;
/* get closest future date*/
select first 1 t."DATE" from test_table_wo_pk t
where (t."DATE" >= :idate) and (t.id = :oid)
order by t."DATE"
into
:date_after;
/* bonus - get closest future or past date */
... You may check date_before, date_after for NULL here, and set closest_date value here....
if ((datediff(day,:date_before,:idate)) < (datediff(day,:idate,date_after))) then
closest_date = :date_before;
else
closest_date = :date_after;
/* set text column */
if (:date_after is not null) then
otext = :date_after;
else
otext = 'replased text';
suspend;
end
end^
SET TERM ;^
其結果是:
SO不是me'的服務的「代碼。你有什麼嘗試,你卡在哪裏? –