我只需要返回 MAX(ID) 的第一行,但我的查询没有返回。
这是我返回的结果集
id bbid indate st val
200817 16543 01/01/16 1 65.4
2017 16543 01/01/16 1 36.52
1995 16543 01/01/16 1 18.51
20932 1234 03/01/16 1 55.3
22324 1234 03/01/16 1 16.52
55 8232 05/01/16 2 100
这就是我想要返回的
id bbid indate st val
200817 16543 01/01/16 1 65.4
22324 1234 03/01/16 1 16.52
55 8232 05/01/16 2 100
(每个bbid只有一行,如果bbid有多个条目则从MAX(ID)中提取数据)
这是帮助排除故障的示例 DDL
Create Table #One
(
id int
,bbid int
,val varchar(100)
)
Create Table #Two
(
bbid int
,st int
,indate datetime
)
Insert Into #One Values
('200817','16543','65.40')
,('2017','16543','36.52')
,('1995','16543','18.51')
,('20932', '1234', '55.30')
,('22324', '1234', '16.52')
,('55', '8232', '100')
Insert Into #Two Values
('16543', '1', '2016-01-01')
,('1234', '1', '2016-03-01')
,('8232','2', '2016-05-01')
这是我写的查询产生了不正确的结果......
Select
t1.id
,t3.bbid
,t3.indate
,t3.st
,t1.val
FROM #One t1
JOIN
(
Select
id
,MAX(ID) As "Maxid"
FROM #One
GROUP BY ID
) t2
ON t1.id=t2.Maxid
INNER JOIN #Two t3
ON t1.bbid = t3.bbid
应如何更改此查询以返回我想要的结果集?
您可以使用公用表表达式 (cte)。
保持简单
或者只是把它作为 t2 放在你的查询中
干得好!
这个使用 CTE,但不依赖 row_number(以防您发现语法过于复杂)