我在 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

所以基本上我们记录所有问题以及谁负责/必须处理问题。
我需要一个查询来找出一个人所涉及的问题:

例如:
  • ID 为 0900 的人参与了 155 和 159。
  • ID 为 0282 的人仅参与了 155。
  • ID 为 0333 的人仅参与了 159。

  • 另外我忘了提到我需要通过 ProblemCode 过滤 ProblemID 的最后一行。例如,找到涉及人员的问题 ID,但该问题最后一个日志行中的 ProblemCode 为 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
    

    但是,它只匹配最后一行。

    最佳答案

    这为您提供了一个人 0900 处理的所有问题,并且在他们的最后一行中有问题代码 = 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)
    

    关于sql - 如果找到 USER,则选择最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7927747/

    10-13 02:52