从SQL表中提取当前数据值和相应的子值

时间:2015-09-02 03:46:32

标签: mysql sql-server

如果已经回答了这个问题,请将我与答案联系起来,我会坐在那里,为什么我没有想到这个搜索?'

我有两个数据库,我试图从使用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

非常感谢任何帮助。

1 个答案:

答案 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