2016-03-22 4 views
0

У меня есть таблица SQL, которая выглядит так, как показано ниже. Он имеет около 4000 наблюдений. Ниже приведен фрагмент. Мне нужна помощь в том, чтобы вытащить все различные значения (имена проектов), сгруппировав их в соответствии с именем проекта и вытащив две последние даты для каждого имени проекта, сравнив значение состояния и вернув «y» в новый столбец, если определенные параметры которые встретились. то есть (если для названия проекта 18362, значения статусных последних дат отчета 2 оба равны 1, возвращает да)SQL matching - Как вывести все значения для каждого уникального значения в одном столбце и сравнить

Report Date Project Name Status value 
3/21/2016 18362     1 
3/14/2016 18355     1 
6/8/2015 18342     2 
4/20/2015 11234     1 
2/15/2015 17893     2 
+0

Это напоминает мне о старой песне Джонни Риверс, где он спел, «они дают вам номер, и забирая свое имя» (IOW, как это, что название проекта это число?) –

+0

Название проекта изначально было числом плюс текстовая строка, однако я удалил текстовую строку ради этого примера. Не нужно размещать всю информацию в Интернете. –

+1

Обычно я делал это через R или python. Простой цикл будет достаточно. Однако я не уверен, как это сделать с помощью SQL. –

ответ

1

Если я правильно понимаю, вы можете сделать это с довольно противными коррелированными подзапросами :

update t 
    set status = (select iif(count(*) = 2, 'yes', 'no') 
        from t as t2 
        where t2.projectname = t.projectname and 
         t2.status = 1 and 
         t2.reportdate in (select top 2 t3.reportdate 
              from t as t3 
              where t3.projectname = t2.projectname 
              order by t3.reportdate desc 
             ) 
       ); 
+0

Хорошо. Благодарю. Это работает. Я попытаюсь найти более чистый путь в будущем, но это должно сделать это. –

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