Извлечение всех идентификаторов, чья сумма значений больше, чем другое значение - PullRequest
0 голосов
/ 30 августа 2018

у меня есть выходная таблица, как эта -

enter image description here

Здесь я хочу получить все идентификаторы, сумма которых больше или равна 40, а также порядок по дате. Я пытался использовать условие, но оно не работает. Это то, что я использовал -HAVING сумма (a.amount)> = 40

Что я могу сделать, чтобы сделать это?

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

Я думаю, что вам нужно уточнить, являются ли идентификаторы приложений уникальными или могут ли они повторяться. Приведенный ниже запрос будет работать в любом случае, но если вам не нужны накладные расходы (если значения уникальны), тогда может работать что-то более простое.

Также я предполагаю, что это сервер базы данных sql.

;WITH SumValues
AS
(
   SELECT Application_ID
         ,SUM(Amount) As SumAmount
   FROM TableName
   GROUP BY Application_ID
)
SELECT Application_ID
FROM SumValues
WHERE SumAmount >= 40
0 голосов
/ 30 августа 2018

Вам, кажется, нужна оконная функция:

select t.*
from (select t.*, sum(amount) over (partition by appl_date, valid_from) as totalamount
      from table t
     ) t
where totalamount >= 40;
0 голосов
/ 30 августа 2018

Если я предполагаю, что "id" означает application_id и что ваша таблица имеет несколько строк для данного application_id, то вы можете просто использовать агрегирование и having.

Непонятно, что вы подразумеваете под "заказ по дате", но вы можете сделать:

select application_id, sum(amount)
from t
group by application_id
having sum(amount) >= 40
order by min(appl_date) asc;
0 голосов
/ 30 августа 2018

Попробуйте использовать подзапрос:

select tablename.* from tablename
inner join
(select id, sum(amount) from tablename
group by id
having sum(amount)>=40)a
tablename.id=a.id
order by appl_date 
...