请考虑以下三个表。联系人列表,具有定义的“等级”的状态列表以及将联系人链接到多个状态的联接表。
CREATE TABLE public."Contacts"
(
name character varying COLLATE pg_catalog."default",email character varying COLLATE pg_catalog."default",contactid integer NOT NULL DEFAULT nextval('"Contacts_contactid_seq"'::regclass),CONSTRAINT "Contacts_pkey" PRIMARY KEY (contactid)
)
CREATE TABLE public.statusoptions
(
option character varying COLLATE pg_catalog."default" NOT NULL,"Rank" integer,CONSTRAINT "ListOptions_pkey" PRIMARY KEY (option)
)
CREATE TABLE public."ContactStatus"
(
contactid integer NOT NULL,option character varying COLLATE pg_catalog."default" NOT NULL,CONSTRAINT "Options_pkey" PRIMARY KEY (contactid,option),CONSTRAINT fk_1 FOREIGN KEY (contactid)
REFERENCES public."Contacts" (contactid) MATCH SIMPLE
ON UPDATE NO actION
ON DELETE NO actION,CONSTRAINT fk_2 FOREIGN KEY (option)
REFERENCES public.statusoptions (option) MATCH SIMPLE
ON UPDATE NO actION
ON DELETE NO actION
)
以下查询返回所有行。
select "Contacts".contactid,"Contacts".name,"ContactStatus".option,statusoptions."Rank" as
currentRank
from "Contacts","ContactStatus",statusoptions
where "Contacts".contactid = "ContactStatus".contactid
and statusoptions.option="ContactStatus".option
这将返回一个如下所示的记录集:
Contactid name Status CurrentRank
1 "john" "apply" 1
1 "john" "Manager Review" 4
2 "bill" "apply" 1
2 "bill" "1st interview" 2
1 "john" "1st interview" 2
我需要创建一个查询/视图,该查询/视图将始终仅返回MAX当前RANK的行。因此,我希望从该视图获得的预期结果是:
Contactid name Status CurrentRank
1 "john" "Manager Review" 4
2 "bill" "1st interview" 2
我随时可以在statusoptions字段中更改“排名”值,从而相应地更改视图。
这可能吗?