这是我的表:
Ref Num Status Task Status
TB011 RET
TB012 RET
TB013 INP Ready
TB013 INP
TB013 INP
TB014 INP In Process
TB014 INP
TB014 INP
TB015 INP Completed
TB015 INP Ready
TB015 INP
TB016 INP Ready
TB016 INP In Process
TB016 INP
TB017 INP Completed
TB017 INP In Process
TB017 INP Ready
TB017 INP
我需要获得每个“Ref Num”的唯一行,其中:
Status
= RET
只有一行,Task Status
将始终为空Status
= INP
我只需要Task Status
未完成的第一行结果应该是这样的:
Ref Num Status Task Status
TB011 RET
TB012 RET
TB013 INP Ready
TB014 INP In Process
TB015 INP Ready
TB016 INP Ready
TB017 INP In Process
备注!我在Ref Num
,Status
,Task Status
之后有更多列,其中包含不同的数据,我也需要它们。
答案 0 :(得分:0)
首先,SQL表表示无序集。因此,没有第一个"第一个"在表中的行。需要有另一列指定排序。让我假设你有这样一排。我将其称为id
。
您所拥有的是优先级问题。大多数数据库都支持ANSI标准row_number()
函数。您可以通过巧妙地使用order by
中的row_number()
子句来执行您想要的操作:
select t.*
from (select t.*,
row_number() over (partition by RefNum
order by (case when status = 'Ret' and taskstatus is null then 1
when status <> 'Ret' and taskstatus <> 'Completed' then id
end)
end) as seqnum
from mytable t
) t;
其中seqnum = 1;
答案 1 :(得分:0)
如果你有一个主键,那么你可以使用该in子句再次过滤。
没有主键我尝试如下希望它可以解决您的问题。
SELECT *
来自test
WHERE status
='RET'
或status
=“INP”
和task_sta
&lt;&gt; “已完成”
GROUP BY refid
限制0,30;