SQL语句的子查询里需要取出按时间倒序的值,如何实现?

T1 1对多 T10
然后需要根据T1的ID 取出在T10表里最早创建的那条
另外 T1还需要去join很多个别的子查询
语句如下 不知道应该如何改

SELECT
T10.new_ecc_si,
T10.new_ecc_competitor_idName
FROM Opportunity T1
LEFT JOIN
(
SELECT
b1.new_ecc_opportunity_id,
b1.CreatedOn,
b1.new_ecc_si,--中标SI
b1.new_ecc_competitor_idName--中标品牌
FROM
Opportunity a1--商机
LEFT JOIN new_ecc_competition b1--竞争对手
ON a1.OpportunityId=b1.new_ecc_opportunity_id
group by b1.new_ecc_opportunity_id,b1.new_ecc_si,b1.new_ecc_competitor_idName,b1.CreatedOn
) as T10
ON T10.new_ecc_opportunity_id = T1.OpportunityId

第1个回答  2016-06-16
order by 默认是 升序的
倒序
order by *** desc
但是你的sql 也没有看见与时间有关的字段啊 ,只能给你提供方法 自己看着办了追问

我在子查询里的group by后面写 order by b1.CreatedOn desc 按创建时间倒序排列
出现错误
除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

追答

group by 后面写order by 没错啊,你单独执行你的子查询看看 是不是子查询本身就不对
如果子查询能成功 再排查其他原因

本回答被网友采纳
第2个回答  2016-06-16
order by 时间 limit 1
试下追问

只要在子查询里写order by 就出现这个

除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

追答

出现什么?是图片还是什么,看不到
看你好像是要查T10中的最早数据
select T10的字段 from T10 where T10.new_ecc_opportunity_id = (select OpportunityId FROM T1) order by time limit 1

就可以了吧

追问

出现上面那句报错啊。。。

我希望T10的数据在子查询里已经排好倒序取出第一条 再出来和T1链接
最终我的报表排序不按T10的这个字段排序 按其他很多个不同字段排序

追答

你order by的是什么字段,group by和order 不要连用时,order by子句中的列必须包含在聚合函数或 group by 子句中

本回答被提问者采纳
相似回答