简体   繁体   English

SQL,在where条件后如何防止行号重置

[英]SQL, how to prevent row number reset after where condition

I have this query:我有这个查询:

SELECT ROW_NUMBER() OVER (ORDER BY total_votes desc, views desc, date desc, time desc) AS rn,
name, date, time, subject, full_address, views, total_votes, user_email, typology_name
FROM photo
ORDER BY total_votes desc, views desc, date desc, time desc;

that produces this result:产生这个结果:

结果 . .

Now, I want to filter the result table so for example I only see lines 2/3/4:现在,我想过滤结果表,例如我只看到第 2/3/4 行:

SELECT ROW_NUMBER() OVER(ORDER BY total_votes desc, views desc, date desc, time desc) AS row_num,
name, date, time, subject, full_address, views, total_votes, user_email, typology_name
FROM(
SELECT *, ROW_NUMBER() OVER (ORDER BY total_votes desc, views desc, date desc, time desc) AS rn
FROM photo) q
WHERE rn >= 2 AND rn <= 4 
ORDER BY total_votes desc, views desc, date desc, time desc;

The problem is that this query returns those 3 lines but putting 1/2/3 as row_num instead of 2/3/4.问题是该查询返回这 3 行,但将 1/2/3 作为 row_num 而不是 2/3/4。 结果 2

What could I do to see the row numbers I saw in the first query?我该怎么做才能看到我在第一个查询中看到的行号? Thanks in advance.提前致谢。

You're performing the second calculation of the row number over outer query, not inner.您正在对外部查询而不是内部查询执行第二次行号计算。 So it returns row numbers of rows in filtered query.所以它返回过滤查询中的行数。 You should use this code:您应该使用以下代码:

SELECT rn, name, date, time, subject, full_address, views, total_votes, user_email, typology_name
FROM(
SELECT *, 
ROW_NUMBER() OVER (ORDER BY total_votes desc, views desc, date desc, time desc) AS rn
FROM photo) q
WHERE rn >= 2 AND rn <= 4 
ORDER BY total_votes desc, views desc, date desc, time desc;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM