我想知道如何在查询中获取单个项目相对于从查询返回的所有项目的相对位置.
例如,得到答案的长手方式是:
single_item = SELECT * FROM table WHERE id=65 result = SELECT * FROM table WHERE published_date < date_value x=1 foreach(result as item): if(item.id == single_item.id): required_value = x endif x++ endforeach
解决方法
使用
analytic/ranking/windowing functionality – 8.4 documentation link:
WITH summary AS ( SELECT t.*,ROW_NUMBER() OVER(ORDER BY t.published_date) AS position FROM TABLE t) SELECT s.* FROM summary s WHERE s.id = 65
替代没有WITH语法:
SELECT s.* FROM (SELECT t.*,ROW_NUMBER() OVER(ORDER BY t.published_date) AS position FROM TABLE t) s WHERE s.id = 65
位置列将是一个整数值,表示ID值为65的记录的位置,基于published_date列以升序排列.如果您希望在有关系时重复位置值,请将ROW_NUMBER()替换为RANK()