我在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
所以基本上我们记录所有问题,谁负责/必须处理问题。 我需要一个查询来查找一个人参与的问题:
例如:
另外我忘了提到我需要通过ProblemCode过滤ProblemID的最后一行。例如,找到涉及人员的problemID,但该问题的最后一个日志行中的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
但是,它只匹配最后一行。
答案 0 :(得分:1)
这为您提供了一个人0900处理的所有问题,并且在最后一行中遇到问题Code = 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)
答案 1 :(得分:1)
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
答案 2 :(得分:0)
也许这个查询可以提供帮助:
SELECT ProblemID
FROM LOGTABLE
WHERE (ResponsibleID = x) OR (AssignedToID = x)
其中LOGTABLE是表的名称,x是Person的ID。
答案 3 :(得分:0)
SELECT distinct problemid
from YourTable
where
( Responsible = 0900
OR AssignedToID = 0900 )
AND ProblemCode <> 1