Попытка получить переменную только для строки с max (date) при суммировании другой переменной во всех строках - PullRequest
2 голосов
/ 26 августа 2011

Мне нужно извлечь значение из строки с максимальной датой, а также суммировать все значения другого столбца.

То, что я имею в виду, выглядит примерно так:

select

a.account_number,
a.client,
a.referral_date,
sum(b.amount),
max(b.date),
case when b.date = max(b.date) then b.due end as due

from a join b on a.account_number = b.account_number
group by a.account_number, a.client, a.referral_date, sum(b.amount), max(b.date), case when b.date = max(b.date) then b.due end

Извините, если это не имеет смысла, но я пытаюсь суммировать ВСЕ "суммы", получая только "должное" из строки с максимальной "датой".

Так что еслиЯ присоединяюсь к ним, так что получается только макс. (Дата). Я не смогу сложить ВСЕ суммы.

Я искал это вечно, но, честно говоря, я даже не знаю, что набиратьв поисковик по этому вопросу.Заранее спасибо за вашу помощь!Дайте мне знать, как я могу уточнить!

Стивен

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Не уверен, что я точно понимаю вашу цель, но как насчет этого:

SELECT account_number, client, referral_date, amount, due
  FROM (SELECT a.account_number,a.client,a.referral_date, b.due, b.date TheDate
             , SUM(b.amount) OVER (PARTITION BY b.account_number) amount
             , MAX(b.date) OVER (PARTITION BY b.account_number) max_dt
          FROM a JOIN b ON a.account_number = b.account_number)
 WHERE TheDate = max_dt;
0 голосов
/ 26 августа 2011

Разве это не сработает:

select a.account_number
     , a.client,
     , a.referral_date
     , sum(b.amount)
     , case when b.date = max(b.date) then b.due end as due
  from a join b 
    on a.account_number = b.account_number
group by a.account_number, a.client, a.referral_date

... и если вы используете PL \ SQL, то непроверенный, но:

select account_number
     , a.client
     , a.referral_date
     , sum(b.amount)
     , max_date
 from ( select a.account_number
         , a.client,
         , a.referral_date
         , b.amount
         , max(b.date) over ( partition by a.account_number, a.client, a.referral_date ) as max_date
      from a join b 
        on a.account_number = b.account_number )
group by a.account_number, a.client, a.referral_date, max_date
...