2017-08-09 86 views
0

我需要一些帮助来改进部分查询。查询返回正确的数据,我只需要排除一些我不需要的额外信息。从连接返回一列的第一个结果,基于第二列

我相信,这将改变主要部分之一是:

JOIN TBL_DATA_TYPE_RO_BODY TB ON TB.FK_ID_TBL_FILE_NAMES=VMI.ID_TBL_FILE_NAMES 

在这一部分,我有,例如,2个FK_ID_TBL_FILE_NAMES,它将返回从TBL_DATA_TYPE_RO_BODY 2分的结果。

,我已是(I排除一些额外的列)的数据:

  • 如果我有2个或更多相等MAG对于相同的字段“ONLY_FIELD_NAME”我应该返回只有第一个(我不不关心其他人)。我相信对于Group by来说这是一个简单的例子,但我在加入时正在做群组。

我的想法:

  1. 使用选择顶部(即here
  2. 使用第一valeu(即here

我有什么(请注意最后2行):

Freq|Mag|Phase|Date|ONLY_FILE_NAME 
1608039|767|3234|37:00.0|RO_Mass_Load_4b 
1608039|781|3371|44:00.0|RO_Mass_Load_4b 
1608039|788|3138|37:00.0|RO_Mass_Load_4b 
1608039|797|3326|44:00.0|RO_Mass_Load_4b 
1608039|808|3117|37:00.0|RO_Mass_Load_4b 
1608039|808|3269|44:00.0|RO_Mass_Load_4b 

我想要什么(请注意最后一行):

Freq|Mag|Phase|Date|ONLY_FILE_NAME 
1608039|767|3234|37:00.0|RO_Mass_Load_4b 
1608039|781|3371|44:00.0|RO_Mass_Load_4b 
1608039|788|3138|37:00.0|RO_Mass_Load_4b 
1608039|797|3326|44:00.0|RO_Mass_Load_4b 
1608039|808|3117|37:00.0|RO_Mass_Load_4b 

请注意,mag字段来自我的JOIN。

想法?任何帮助?


如果你想看到整个代码为:

SELECT TW.CURRENT_MEASUREMENT as Cycle_Current_Measurement, 
TW.REF_MEASUREMENT as Cycle_Ref_Measurement, 
CONVERT(REAL,TT.CURRENT_TEMP) as Cycle_Current_Temp, 
CONVERT(REAL,TT.REF_TEMP) as Cycle_Ref_Temp, 
TP.TYPE as Cycle_Type, TB.FREQUENCY as Freq, 
TB.MAGNITUDE as Mag, 
TB.PHASE as Phase, 
VMI.TIME_FORMATTED as Date, 
VMI.ID_TBL_FILE_NAMES as IdFileNames, VMI.ID_TBL_DATA_TYPE_RO_HEADER as IdHeader, VMI.* 
FROM VW_MAIN_INFO VMI 
JOIN TBL_DATA_TYPE_RO_BODY TB ON TB.FK_ID_TBL_FILE_NAMES=VMI.ID_TBL_FILE_NAMES 
LEFT JOIN TBL_POINTS_AND_CYCLES TP ON VMI.ID_TBL_DATA_TYPE_RO_HEADER = TP.FK_ID_TBL_DATA_TYPE_RO_HEADER 
LEFT JOIN TBL_POINTS_AND_MEASUREMENT TW ON VMI.ID_TBL_DATA_TYPE_RO_HEADER = TW.FK_ID_TBL_DATA_TYPE_RO_HEADER 
LEFT JOIN TBL_POINTS_AND_TEMP TT ON VMI.ID_TBL_DATA_TYPE_RO_HEADER = TT.FK_ID_TBL_DATA_TYPE_RO_HEADER 

回答

0

尝试这样的事情。 partition by就像是group by;它定义了组row_number将自动递增一个整数的顺序。该顺序通过row_number告知row_number哪些行应具有较小的数字。因此在这个例子中,最低日期的RID = 1。然后子查询它,并且只选择那些有RID = 1

select * 
from (select RID = row_number() over (partition by tb.Magnitude order by vmi.time_formatted) 
     from ...<rest of your query>) a 
where a.RID = 1 
相关问题