我有一个不花时间的查询:
select count(*) from mytable where processed_status = 0 and tid not in
(select max(tid) from mytable group by userid)
tid是一个自动递增的唯一标识符。我从mytable中获取了不是基于userid的最新行的所有行。这些是重复的行,我放弃它们。现在我添加另一个过滤器来获取特定行以及上述查询中的所有行。我运行以下查询,它在我杀死之前运行了10分钟。
select count(*) from mytable where processed_status = 0 and (tid = 5 or tid not in
(select max(tid) from mytable group by userid))
如果有更好的方法来获取所有重复的行,我也会对一些想法感兴趣。
答案 0 :(得分:2)
您可以使用ROW_NUMBER()
分析函数:
SELECT COUNT(*)
FROM (
SELECT tid,
ROW_NUMBER() OVER ( PARTITION BY userid ORDER BY tid DESC ) AS rn
FROM mytable
WHERE processed_status = 0
)
WHERE tid = 5
OR rn > 1