2015-01-22 3 views
0

У меня есть эта следующая таблица, в которой мне нужно подсчитать, как type = D , но если этот идентификатор заканчивается R, то он должен рассчитывать, как .Граф типа с использованием, если потом еще

ID 123 всегда начинается с D, то это может быть R, то может быть D или А.

ID   Decision Dt  Type/Status 
123  1/15/2014   D  
123  1/20/2014   A 
123  1/15/2014   R 

я написал SQL, как sum(if(type=d)then 1 else 0 end). Я получаю правильный счет до type/status R. И это единственный идентификатор в БД, который заканчивается статусом R и не перемещается в D. Мне нужна помощь в написании sql.

Спасибо за помощь заранее.

+1

, какую базу данных вы используете и как найти ** ID заканчивается R ** –

+0

@NoDisplayName - я использую Teradatabase – sai

+0

@NoDisplayName - эти идентификаторы могут быть утилизированы (D) и R (Reverse Disposed) .. и это можно увидеть на основании даты принятия решения. – sai

ответ

0

Вас интересуют все записи с типом D и R. Вам также нужно как-то пометить последнюю запись. Это можно сделать с помощью RANK. Ранг 1 для последней записи на идентификатор.

Затем группируйте по ID и посмотрите, есть ли последняя запись с типом R для этого идентификатора. Если так что результат 0, в противном случае счетчик типа D.

select 
    id, 
    case when max(case when last_is_one = 1 and type = 'R' then 1 end) = 1 then 
    0 
    else 
    count(case when type = 'D' then 1 end) 
    end as d_count 
from 
(
    select 
    id, 
    type, 
    rank() over (partition by id order by decision_dt desc) as last_is_one 
    from mytable 
    where type in ('D','R') 
) d_and_r 
group by id; 

SQL скрипка: http://www.sqlfiddle.com/#!3/48c820/3.

+0

Я попробовал ваш запрос, я все еще получаю счет D как 1 и RD как 0, а даты - 1/15/2014 для D и RD – sai

+0

Странно, запрос должен делать то, что вы хотите. Я добавил скрипт SQL, где вы видите, что он работает. Я также исправил незначительные ошибки (отсутствующее ключевое слово CASE и имя производной таблицы, которые нужны некоторым dbms), но вы уже заметили их; иначе вы не могли бы запустить запрос. Поэтому, пожалуйста, взгляните на скрипку, чтобы снова проверить. –

+0

эй я понял, что вне .. Я также включал решение dt в select и group, поэтому я не смог его получить. Но спасибо Торстен Кеттнер. – sai

Смежные вопросы