2015-09-02 32 views
0

如果已經回答了這個問題,只要將我連接到答案,我就會坐在那裏「爲什麼我沒有想到這樣的搜索?從SQL表中提取當前數據值和相應的子值

我有兩個數據庫,我試圖從SQL中提取數據。數據庫是父母和孩子。

每 - 家長,的Hed - 兒童

每有以下信息列:站點,varfrom,瓦爾託,SDATE,表而其他的都不重要

具有的Hed以下信息欄:站點,varfrom,瓦爾託,表,發佈,名稱,而其他的都不重要

每例子 - 真假是額外的一列

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

你爲什麼要標記它作爲MySQL和SQL服務器?你真的在使用什麼數據庫? – Shiva

+0

你的意思是你在1個數據庫中有2個表,或者你是否每個表有2個獨立的數據庫? (根據標籤一個在mysql中,一個在sql-server?) –

+0

Opps,這是我對標籤的熱情。抱歉。這不是sql-server。 Per和Hed是分開但非常相關的。 Per中的每個記錄在Hed中都有一個或多個記錄。還有第三個級別,每個Hed條目都有多個記錄,但我不需要這些條目。 認爲它是Per是整體信息,Hed給數據增加了更多描述,而第三個層次是數據。 Per提供時間,使用Hed及以下的信息。 – Tekki

回答

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 
+0

不工作對不起,這是我的錯,因爲沒有正確標記。 – Tekki