将元素与表中的最后一个元素进行比较

时间:2014-03-14 14:43:30

标签: sql database postgresql

我正在使用PostgreSQL中的3个表

1. documents: dId, title, subtitle
2. documentfolder: dfId, dId, type
3. staff: sId, dfId, sType

表格之间的关系如下:

不同的员工可以通过基于sType的dfId访问不同的文档文件夹。文档文件夹包含基于其ID和类型的不同文档。

我正在尝试测试文档是否在文档文件夹表的最后列出。我想通过相互测试标题来保持文件夹按字母顺序排列,堆栈的最后一个文档按字母顺序排在最后。 这就是我得到的:

SELECT d.title
FROM document d1, document d2, documentfolder df, staff s
WHERE s.sType = 'manager'
AND s.dfId = df.dfId
AND df.type = 'financial'
AND df.dId = d1.dId
AND df.dId = d2.dId
AND d1.title > d2.title

因此,在使用应该发生碰撞的数据运行测试时,我得到0次点击。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不完全确定我是否理解了你的问题,但是这将为每个标题返回一个标志,无论它是否是最后一个文件。如果需要更多,可以在结果中添加更多列。

select title, 
       rn = 1 as is_last_document
from (
  SELECT d.*,
         row_number() over (order by title desc) as rn
  FROM document, 
    JOIN documentfolder df ON df.dId = d.dId
    JOIN staff s ON s.dfId = df.dfId
  WHERE s.sType = 'manager'
    AND df.type = 'financial'
) t
order by title;