查询错误IN GROUP BY

时间:2015-09-14 10:23:08

标签: sql sql-server

我只需要F_LATPRIMI

中的一个F_LONPRIMII_ID_NAVE
select  I_ID_NAVE  ,F_LATPRIMI ,F_LONPRIMI
from(
    select 
        distinct imo,[N_ident_seguenziale]
    from    
        navi  
        inner join
        [ESTERNALIZZAZIONE_FASCICOLINAVE]
    ON
        [ESTERNALIZZAZIONE_FASCICOLINAVE].[I_ID_NAVE]=navi.[N_ident_seguenziale]
) as tabimo
inner join
    posizioni 
    on
    posizioni.[I_ID_NAVE]=tabimo.[N_ident_seguenziale] 

 where 
     DATEDIFF(minute, D_TS,GETDATE() )<30 
     group by I_ID_NAVE

错误是

  

Msg 8120,Level 16,State 1,Line 3 Column'posizioni.F_LATPRIMI'是   在选择列表中无效,因为它不包含在任何一个中   聚合函数或GROUP BY子句。

1 个答案:

答案 0 :(得分:4)

我认为您所寻找的不是GROUP BY而是ROW_NUMBER()功能

select  I_ID_NAVE,
F_LATPRIMI ,
F_LONPRIMI
from (
    select 
        imo,[N_ident_seguenziale], I_ID_NAVE, 
        F_LATPRIMI ,F_LONPRIMI,
        ROW_NUMBER() OVER(PARTITION BY I_ID_NAVE ORDER BY I_ID_NAVE) AS rn
    from    
        navi inner join [ESTERNALIZZAZIONE_FASCICOLINAVE]
    ON [ESTERNALIZZAZIONE_FASCICOLINAVE].[I_ID_NAVE] = navi.[N_ident_seguenziale]) tabimo
join posizioni p on p.[I_ID_NAVE] = tabimo.[N_ident_seguenziale]
where DATEDIFF(minute, D_TS,GETDATE() ) < 30
and rn = 1;