从连接返回基于第二列的一列的第一个结果



我需要一些帮助来改进我的部分查询。查询返回正确的数据,我只需要排除一些不需要的额外信息。

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

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 个结果。

我拥有的数据是(我排除了一些额外的列(:

  • 如果我对同一个字段"ONLY_FIELD_NAME"有 2 个或更多相等的 MAG,我应该只返回第一个(我不关心其他的(。我相信这是分组依据的简单情况,但我在联接时无法进行分组。

我的想法:

  1. 使用选择顶部(即此处(
  2. 使用第一个 valeu(即此处(

我有什么(注意最后两行(:

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 

尝试这样的事情。partition by就像一个group by; 它定义了row_number将自动将整数递增 1 的组。排序依据告诉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

相关内容

最新更新