在Sybase ASE上运行此命令。 我得到一个错误子查询返回超过1的值。当子查询跟随=等等时,这是非法的。
在子查询中,我试图按日期选择最新值。
数据会是这样的 Doc_no用户日期 AA琼斯2018年3月23日 AA steph 2018年3月10日 BB dan 2018年1月1日 BB jon 2010年1月1日
在这个例子中,我应该返回2个值来加入并显示。 AA应该显示琼斯 BB应该显示dan,因为他们有最新的日期。 数据实际上是数百万行要搜索。
use mydb_hist
go
select
d.doc_no,
d.doc_short_name,
d.doc_name,
r.doc_no,
r.revision_code,
r.revision,
r.description,
d.last_update,
d.document_category_code,
d.business_group_code,
(case
when substring(grp.group_name,1,10) = 'GEL IPP Do' THEN 'Yes'
else 'No'
END) as 'GEL',
(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
join document_revision r on r.doc_no = d.doc_no
left join mydb..document_type_group grp on grp.doc_no = d.doc_no and substring(grp.group_name,1,10) = 'Leg PII Do'
left join mydb..document_instance d1 on d1.doc_no = d.doc_no
where d.dbOprnCD = 'I'
and d.last_update > '1 Jan 2018'
--and grp.group_name LIKE 'GEL%' --shortened this so the substring in the group by matches, getting a server error for the work table size otherwise
group by d.doc_no,
d.doc_short_name,
d.doc_name,
r.doc_no,
r.revision_code,
r.revision,
r.description,
d.last_update,
d.document_category_code,
d.business_group_code,
substring(grp.group_name,1,10)
答案 0 :(得分:0)
这个怎么样?
如果index_user_id对于给定的doc_no和entry_date不是唯一的,那么您需要将子选择移动到下面的连接。这将允许您在group by子句中包含index_user_id。
use mydb_hist
go
select
d.doc_no,
d.doc_short_name,
d.doc_name,
r.doc_no,
r.revision_code,
r.revision,
r.description,
d.last_update,
d.document_category_code,
d.business_group_code,
(case
when substring(grp.group_name,1,10) = 'GEL IPP Do' THEN 'Yes'
else 'No'
END) as 'GEL',
d1.index_user_id as 'last indexed by'
from documents d
join document_revision r on r.doc_no = d.doc_no
left join mydb..document_type_group grp on grp.doc_no = d.doc_no and substring(grp.group_name,1,10) = 'Leg PII Do'
left join mydb..document_instance d1 on d1.doc_no = d.doc_no and d1.entry_time = (select max(d3.entry_time)
from mydb..document_instance d3
where d3.doc_no = d1.doc_no)
where d.dbOprnCD = 'I'
and d.last_update > '1 Jan 2018'
group by d.doc_no,
d.doc_short_name,
d.doc_name,
r.doc_no,
r.revision_code,
r.revision,
r.description,
d.last_update,
d.document_category_code,
d.business_group_code,
substring(grp.group_name,1,10)
d1.index_user_id