首页 > 解决方案 > 显示最近的笔记

问题描述

我的任务是显示来自以下查询的最新注释。

SELECT repair.jobnumber
    ,repair.jobname
    ,property.address
    ,n.memnote
    ,repair.DATE
    ,property.propertypk
FROM property
LEFT JOIN repair ON repair.propertyfk = property.propertypk
LEFT JOIN (
    SELECT memnote
        ,max(DATE) AS DATE
        ,notetype
        ,notepk
        ,propertyfk
    FROM note
    WHERE notetype = 'PS'
    GROUP BY memnote
        ,notetype
        ,notepk
        ,propertyfk
    ) n ON n.propertyfk = property.propertypk
WHERE repairtype = 'garden'

但它仍然显示所有类型为 PS 的注释,而不是每次维修和最近的不在物业上的注释。

标签: sqlsql-server

解决方案


使用row_number()

select r.jobnumber, r.jobname, p.address, n.memnote, r.date, p.propertypk
from property p join
     repair r
     on r.propertyfk = p.propertypk left join
     (select n.*, row_number() over (partiiton by n.propertypk order by n.date desc) as seqnum
      from note
      where notetype = 'PS' 
     ) n
     on n.propertyfk = p.propertypk and n.seqnum = 1
where r.repairtype = 'garden';

注意:您repairtypewhere子句中进行过滤,所以我将其更改join为内部连接。如果您想要所有属性,则将该条件移至on并使用left join


推荐阅读