2017-11-22 7 views
1

私はこのクエリの各コードのトップ1を返そうとしていますが、これは私に構文エラーを与えています。私は何ができるのですか? SybaseのASEを想定しサブクエリでトップ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

'di''のための別名が実際にそのを外部参照では、ありませんdi.index_user_id' 。 –

+0

左のジョインでサブクエリを実行し、左のジョインから値を選択します。 – NendoTaka

+1

私はあなたが取得しようとしているサブクエリの列から 'di.'を削除する必要があると思います。 –

答えて

0

top #句は、あなただけはしようとしているように、すなわち、それは相関サブクエリでサポートされていない、派生テーブルでサポートされています。

また、order byは、サブクエリ(派生テーブルまたは相関関係)ではサポートされていません。

クエリを正しく読んでいる場合は、max(entry_time)のレコードにはindex_user_idが必要です。これが正しいこと、および単一のレコードと仮定すると与えられた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 
関連する問題