ВЫБЕРИТЕ последнюю строку, если найден пользователь - PullRequest
3 голосов
/ 28 октября 2011

У меня есть таблица журнала в SQL Server.Таблица структурирована следующим образом:

Unique  ProblemID  ResponsibleID  AssignedToID  ProblemCode

155     155        0282                         4
156     155                       0900
157     155                                     3
158     155                       0147          1
159     159        0111                         2
160     159                       0333          4
161     159        0900                         1

Таким образом, в основном мы регистрируем все проблемы и кто был ответственным / должен был решить проблему.Мне нужен запрос, который определил бы, в каких проблемах участвовал один человек:

Например:

  1. Лицо с ID 0900 участвовало как в 155, так и в 159.
  2. Человек с ID 0282 участвовал только в 155 человеке.
  3. Человек с ID 0333 был вовлечен только в 159.

Также я забыл упомянуть, что мне нужно отфильтровать последний рядProblemID от кода проблемы.Например, найдите problemID, где человек вовлечен, но там код проблемы в последней строке журнала этой проблемы равен 1 (что означает, что проблема теперь закрыта).

Кроме того, я работал с запросом:

    select ProblemID, EntryTime, ResponsibleID, ProblemCode, AssignedToID
    from (select ProblemID, EntryTime, ResponsibleID, ProblemCode,  AssignedToID,
    row_number() over(partition by ProblemID order by EntryTime desc) as rn
    from myTable) as T
    where rn = 1 and ResponsibleID = '00282' OR AssignedToID = '00282' 
    and veiksmoid <> 4

Однако он соответствует ТОЛЬКО последним строкам.

Ответы [ 4 ]

1 голос
/ 28 октября 2011
SELECT ag.UserId, ag.ProblemID
FROM(
   SELECT ProblemID, ResponsibleID as UserId
   FROM Table 
   WHERE ResponsibleID IS NOT NULL

   UNION ALL

   SELECT ProblemID, AssignedToID  as UserId
   FROM Table 
   WHERE AssignedToID IS NOT NULL
) ag
GROUP BY ag.UserId, ag.ProblemID
1 голос
/ 28 октября 2011

Это дает вам все проблемы, с которыми столкнулся человек 0900 и у которого problemCode = 1 в последней строке. Я не могу проверить это, поэтому могут быть некоторые ошибки.

SELECT problemID FROM <table> t1
WHERE problemID IN  (
      SELECT problemID FROM <table>
      WHERE (ResponsibleID = 0900 OR AssignedToID = 0900))
AND problemCode = 1
AND unique = (SELECT MAX(unique) FROM <table> WHERE problemID = t1.problemID)
0 голосов
/ 28 октября 2011
SELECT distinct problemid
   from YourTable
   where 
         ( Responsible = 0900
      OR AssignedToID = 0900 )
      AND ProblemCode <> 1
0 голосов
/ 28 октября 2011

Возможно, этот запрос мог бы помочь:

SELECT ProblemID
FROM LOGTABLE
WHERE (ResponsibleID = x) OR (AssignedToID = x)

, где LOGTABLE - имя таблицы, а x - идентификатор человека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...