Как отфильтровать повторяющиеся серии в SQL

Я использую SQL 2008 для создания запроса с использованием внутреннего соединения:

SELECT t2.intencion_id,t2.numpago,t3.orden,t2.importe
  ,SUM([importeaplicado]) AS importeaplicado
  ,t3.intfinanciamiento_interes
  ,t1.[estatus] FROM [APLICACIONES] as t1
inner join movcargos as t2 on t1.idmovcargo=t2.idmovcargo 
inner join intenciones_financiamiento as t3 on (t2.intencion_id=t3.intencion_id and t2.numpago=t3.intFinanciamiento_pagoNumero) where t2.idtipomovimiento=1 and t1.estatus='A' GROUP BY t2.intencion_id,numpago,importe,t1.estatus,intfinanciamiento_interes,t3.orden order by intencion_id,numpago,orden desc

среди столбцов, возвращаемых этим запросом, есть 3 повторяющихся ряда: intent_id, numpay и order resultado de consulta но я хочу, чтобы вы показали записи всех намерений, всех чисел, но только высшего порядка

, как я могу выполнить эту фильтрацию?

0
задан 02.11.2016, 16:54
2 ответа

Как comentГ©, вопрос не является очень ясным. Но я interpretaciГіn дело в том, что для любой серии реестров, который имеет ту же стоимость для нее combinaciГіn intencion_id, numpago, ты только хочешь, чтобы он возвратил тебе реестр, у которого есть самая большая стоимость для колонны orden.

, случай этот, этого могут добиваться используя row_number(), чтобы выдавать эти реестры:

;with cte as (
    SELECT row_number() over (
              partition by t2.intencion_id, t2.numpago
                  order by t3.orden desc) as rnk,
           t2.intencion_id,
           t2.numpago,
           t3.orden,
           t2.importe,
           SUM([importeaplicado]) AS importeaplicado,
           t3.intfinanciamiento_interes,
           t1.[estatus] 
      FROM [APLICACIONES] as t1
      join movcargos as t2
        on t1.idmovcargo = t2.idmovcargo 
      join intenciones_financiamiento as t3
        on t2.intencion_id = t3.intencion_id
       and t2.numpago = t3.intFinanciamiento_pagoNumero
     where t2.idtipomovimiento = 1
       and t1.estatus = 'A'
     GROUP BY t2.intencion_id,
              numpago,
              importe,
              t1.estatus,
              intfinanciamiento_interes,
              t3.orden
)
select intencion_id,
       numpago,
       orden,
       importe,
       importeaplicado,
       intfinanciamiento_interes,
       [estatus]
  from cte
 where rnk = 1
 order by intencion_id,
          numpago

Вероятно есть лучший способ добиваться того, что ты просишь, но tendrГ-туза, который нужно описывать лучше твои подмостки.

2
ответ дан 24.11.2019, 12:49
  • 1
    твой solució n функционируй совершенно, если он был выдан, это тот, который искал, реализовывать. большое спасибо! –  German AT 01.11.2016, 22:55

Я не понимаю совсем данных, но буду принимать следующее:

  • У всех групп линий есть те же поля ordenа именно, если orden больше он 5, всегда ты будешь получать результаты с командой 1, 2, 3, 4 y 5 каких всегда ты будешь хотеть orden 5.

Того, чтобы быть верным предыдущее решение было бы этим:

SELECT t2.intencion_id,t2.numpago,t3.orden,t2.importe
  ,SUM([importeaplicado]) AS importeaplicado
  ,t3.intfinanciamiento_interes
  ,t1.[estatus] FROM [APLICACIONES] as t1
inner join movcargos as t2 on t1.idmovcargo=t2.idmovcargo 
inner join intenciones_financiamiento as t3 on (t2.intencion_id=t3.intencion_id and t2.numpago=t3.intFinanciamiento_pagoNumero) 
WHERE t2.idtipomovimiento=1 
and t1.estatus='A' 
and t3.orden = max(select orden from intenciones_financiamiento)
GROUP BY t2.intencion_id, numpago, importe, t1.estatus, intfinanciamiento_interes, t3.orden 
ORDER BY intencion_id, numpago, orden desc

Конечно я рекомендую использовать having by так что, если ты подтверждаешь, что это решение функционирует, он мог бы помогать тебе писать ее других более оптимальных форм.

0
ответ дан 24.11.2019, 12:49

Теги

Похожие вопросы