在子查询中选择前1名?

时间:2017-11-22 18:47:55

标签: sql sybase

我试图在此查询中为每个代码返回前1名,但这给了我语法错误。有什么想法我可以做什么?

SELECT d.doc_no,
       d.doc_short_name,
       d.doc_name,
       r.revision_code,
       r.revision,
       r.description,
       dtg.group_name,
  (SELECT top 1 di.index_user_id
   FROM document_instance
   WHERE doc_no = d.doc_no
   ORDER BY entry_time DESC) AS 'last indexed by'
FROM documents d
LEFT JOIN document_revision r ON r.doc_no = d.doc_no
LEFT JOIN document_instance di ON di.doc_no = d.doc_no
LEFT JOIN document_type_group dtg ON dtg.doc_no = d.doc_no

1 个答案:

答案 0 :(得分:0)

假设Sybase ASE,top #子句仅在派生表中受支持,即在您尝试的相关子查询中不支持它。

另请注意,任何子查询(派生表或相关的)都不支持order by

如果我正确阅读了查询,您需要index_user_id作为max(entry_time)的记录;如果这是正确的,并假设为给定的doc_no/entry_time组合返回单个记录,您可以尝试类似:

SELECT d.doc_no,
       d.doc_short_name,
       d.doc_name,
       r.revision_code,
       r.revision,
       r.description,
       dtg.group_name,

       (SELECT d2.index_user_id
        FROM   document_instance d2
        WHERE  d2.doc_no     = d1.doc_no
        and    d2.entry_time = (select max(d3.entry_time)
                                from   document_instance d3
                                where  d3.doc_no = d1.doc_no)
       ) as 'last indexed by'

FROM      documents d
LEFT JOIN document_revision r     ON   r.doc_no = d.doc_no
LEFT JOIN document_instance d1    ON  d1.doc_no = d.doc_no
LEFT JOIN document_type_group dtg ON dtg.doc_no = d.doc_no