如果已经回答了这个问题,请将我与答案联系起来,我会坐在那里,为什么我没有想到这个搜索?'
我有两个数据库,我试图从使用SQL中提取数据。数据库是父母和孩子。
Per-Parent,Hed-Child
Per有以下信息栏:Site,varfrom,varto,sdate,table和其他不重要的信息
Hed有以下信息栏:网站,varfrom,varto,表格,版本,名称和其他不重要的信息
每个例子 - true和false是额外列之一
STATION VARFROM VARTO SDATE STIME REFSTN REFTAB
221209A 100.00 141 8/11/2006 1200.00 221209A 23 FALSE
221209A 100.00 141 22/04/2007 400.00 221209A 23 TRUE
221209A 100.00 141 30/04/2007 1600.00 221209A 24 FALSE
221209A 100.00 141 2/11/2007 0.00 221209A 24 TRUE
221209A 100.00 141 5/11/2007 2000.00 221209A 25 FALSE
221209A 100.00 141 24/11/2008 0.00 221209A 26 FALSE
221209A 100.00 141 16/02/2010 45.00 221209A 27 FALSE
221210A 100.00 141 22/08/1972 1545.00 221210A 1 FALSE
221210A 100.00 141 3/06/1978 1500.00 221210A 2 FALSE
221210A 100.00 141 5/07/1982 1130.00 221210A 1 FALSE
221210A 100.00 141 28/07/1984 1225.00 221210A 3 FALSE
221210A 100.00 141 24/02/1987 1200.00 221210A 2 FALSE
221210A 100.00 141 28/04/1988 1600.00 221210A 4 FALSE
221210A 100.00 141 5/01/1992 1430.00 221210A 3 FALSE
Hed示例
STATION VARFROM VARTO TABLE RELEASE NAME
221209A 100.00 141 23 0 23.0
221209A 100.00 141 24 0 24.0
221209A 100.00 141 25 2 25.02
221209A 100.00 141 25 1 25.01
221209A 100.00 141 25 0 25.00
221209A 100.00 141 26 0 26.00
221209A 100.00 141 27 0 27.00
221210A 100.00 141 1 3 1.03
221210A 100.00 141 1 2 1 B
221210A 100.00 141 2 6 2.06
221210A 100.00 141 2 5 2.05
221210A 100.00 141 2 4 2 D
221210A 100.00 141 3 1 3.01
221210A 100.00 141 3 0 3
221210A 100.00 141 4 2 4.02
221210A 100.00 141 4 1 4 A
所以我想要的是它为每个网站返回最新的sdate,然后给我每个网站的当前名称
所以这个例子的答案是
Site Varfrom Varto sdate name
221209A 100.00 141 16/02/2010 27.00
221210A 100.00 141 5/01/1992 3.01
如果网站来自Per或Hed,那无关紧要。
目前我有任意数量的编码尝试可以解决所有问题,但名称不正确。以下是一个例子。我只是不知道如何让它给我一个正确名称的最新sdate。
select
hed.site,
hed.name,
max(per.sdate) as "Period",
hed.varfrom,
hed.varto
from hed inner join per
on hed.site=per.site AND
hed.table=per.reftab
where
hed.varfrom=100.00
AND hed.varto=141
非常感谢任何帮助。
答案 0 :(得分:0)
试试这个
;with cte as (
select site,Varfrom ,Varto,reftable,sdate,r=ROW_NUMBER() over(partition by site order by sdate desc) from per
)
select per.site,per.Varfrom ,per.Varto,hed.name from cte per
inner join hed on per.site = hed.site and per.reftable=hed.reftable and per.r=1