我有一张表,可以为雇主的雇员“索引”所捕获的文件。每个文档都有一个唯一的ID,一个URI,捕获的日期,staffid(FK)和一个名为“tag”的文档类型列
gv2=# \d staffdoc
Table "zoozooland_789166.staffdoc"
Column | Type | Modifiers
------------+-----------------------------+-----------------------
id | uuid | not null
asseturi | text | not null
created | timestamp without time zone | not null
created_by | uuid | not null
tag | text | not null
is_active | boolean | not null default true
staffid | uuid | not null
Foreign-key constraints:
"staffdoc_staffid_fkey" FOREIGN KEY (staffid) REFERENCES staffmember(id)
Inherits: assetdoc
我想写一份报告,用于突出显示遗失的文件。
对于每个工作人员,报告应该有一个列用于每个文档标记类型,因此预先知道列的nr。
目前我在应用程序中完成所有这些操作 - 生成所有可能标记的列表(SELECT DISTINCT tag FROM table
),生成所有可能的人员ID列表,然后为每个员工ID运行多个查询以获取在每个标记值的已创建列中具有最大值的文档。
我很确定我至少应该能够将每个文档类型(标记值)(每个职员ID的最新文档)优化为一个查询,这将是一个足够好的优化。
典型情况是4或5个文档标记值(文档类型),因此运行5个查询比运行5个人员查询更容易接受。
在最终报告中,我有以下专栏:
Staff-member Name, doctype1, doctype2, doctype2, etc
该名称是从员工成员表中“加入”的。 doctype列中的值是该职员的该doc标签的日期的最后(MAX)值,如果该职员缺少该文档,则为“无”。
FWIW我正在使用Postgres 9.5