使用内部联接扩展长SQL(server 2000)
最近,stackoverflow上一位非常友好的用户帮助我使用以下SQL:使用内部联接扩展长SQL(server 2000),sql,sql-server,Sql,Sql Server,最近,stackoverflow上一位非常友好的用户帮助我使用以下SQL: SELECT (SELECT TOP 1 a.id FROM vAnalysesHistory AS a WHERE a.companyid = n.stockid ORDER BY a.chosendatetime DESC) AS id, n.name, (SELECT TOP 1
SELECT (SELECT TOP 1
a.id
FROM vAnalysesHistory AS a
WHERE a.companyid = n.stockid
ORDER BY a.chosendatetime DESC) AS id,
n.name,
(SELECT TOP 1
a.chosendatetime
FROM vAnalysesHistory AS a
WHERE a.companyid = n.stockid
ORDER BY a.chosendatetime DESC) AS chosendatetime
FROM vStockNames AS n
这很有效。现在我想扩展这个SQL。在vAnalysesHistory表中有一个名为analyseid的属性。例如,我只想获取analyseid=3的行
我的尝试:
SELECT (SELECT TOP 1
a.id
FROM vAnalysesHistory AS a
WHERE a.companyid = n.stockid AND analyseid = 3
ORDER BY a.chosendatetime DESC) AS id,
n.name,
(SELECT TOP 1
a.chosendatetime
FROM vAnalysesHistory AS a
WHERE a.companyid = n.stockid AND analyseid = 3
ORDER BY a.chosendatetime DESC) AS chosendatetime
FROM vStockNames AS n
问题在于,vStockNames中的每一行都没有analyseid=3的分析。因此,返回的某些行的id和chosendatetime为null
你能帮我吗?我只想要存在的行,并使用analyseid进行分析,例如analyseid=3
哦,是的,服务器是2000
提前感谢我使用了另一种方法:
SELECT B.id, C.ChosenDateTime, N.name
FROM (SELECT companyid, MAX(chosendatetime) AS ChosenDateTime
FROM vAnalysesHistory AS A
WHERE (analyseid = 3)
GROUP BY companyid) AS C INNER JOIN
vAnalysesHistory AS B ON C.companyid = B.companyid AND C.ChosenDateTime = B.chosendatetime AND B.analyseid = 3 INNER JOIN
vStockNames AS N ON N.stockid = C.companyid
ORDER BY N.name
由于它是一个派生列,您需要将此查询包装到另一个查询中,并过滤结果。或者,一个“exists”where子句应该这样做:
SELECT (SELECT TOP 1
a.id
FROM vAnalysesHistory AS a
WHERE a.companyid = n.stockid AND analyseid = 3
ORDER BY a.chosendatetime DESC) AS id,
n.name,
(SELECT TOP 1
a.chosendatetime
FROM vAnalysesHistory AS a
WHERE a.companyid = n.stockid AND analyseid = 3
ORDER BY a.chosendatetime DESC) AS chosendatetime
FROM vStockNames AS n
WHERE exists (
select
1
from
vAnalysesHistory
where
stockid = n.stockid
and analyseid = 3)