Sql 表或视图中的行号()?

Sql 表或视图中的行号()?,sql,postgresql,sql-view,row-number,Sql,Postgresql,Sql View,Row Number,它创建一个视图。当我使用“从表中选择”时,它会给出一个结果,但当我从上面的视图中选择时,没有结果。有什么问题 表t1为 CREATE OR REPLACE VIEW public."masterx" AS SELECT row_number() OVER (ORDER BY st_distance(t1.geom, t2.geom)) AS rownum, t1.id_seq, t2.pars_id, st_distance(t1.geom, t2.geom) AS

它创建一个视图。当我使用“从表中选择”时,它会给出一个结果,但当我从上面的视图中选择时,没有结果。有什么问题

表t1为

CREATE OR REPLACE VIEW public."masterx" AS 
 SELECT row_number() OVER (ORDER BY st_distance(t1.geom, t2.geom)) AS rownum,
    t1.id_seq,
    t2.pars_id,
    st_distance(t1.geom, t2.geom) AS mesafe
   FROM kadas t2,v7 t1
  WHERE st_dwithin(t2.geom, t1.geom, 400::double precision) = true
  AND t1.datex > ('now'::text::date - '180 days'::interval);
表2为

id_seq|field a | field b| geom|
我想用geom列(两点)连接两个表。 __

如果我尝试选择:

SELECT row_number() OVER (ORDER BY st_distance(t1.geom, t2.geom)) AS rownum,
    t1.id_seq,
    t2.id,
    st_distance(t1.geom, t2.geom) AS distance
   FROM table2 t2,table1 t1
  WHERE st_dwithin(t2.geom, t1.geom, 400::double precision) = true 
在1秒内给出结果

但是当我使用

where t2.id= 12345
当尝试查询此视图时,没有结果。 有什么问题

似乎排数是这里的问题,但为什么

__

表1 v7有200万行。
表2卡达斯t2有1百万行

create view as x (
SELECT row_number() OVER (ORDER BY st_distance(t1.geom, t2.geom)) AS rownum,
        t1.id_seq,
        t2.id,
        st_distance(t1.geom, t2.geom) AS distance
       FROM table2 t2,table1 t1
      WHERE st_dwithin(t2.geom, t1.geom, 400::double precision) = true 
)
哪里没有解决方案。
我想做的是:
选择缓冲区中t1的点,t2点在400米范围内,并按距离排序。这里没有问题,但当我尝试按距离获取行号以限制查询的前100行时,它会使db和comp变得疯狂,并且没有解决方案**

不确定,但我会简化
CREATE
语句,如下所示:

select * from masterx.  
where  pars_id =422328447  
'now'
是一个常量,我假设您需要函数now():

提示:在指定默认值时,您不希望使用第三种形式(
'now'
) 子句创建表时。系统现在将转换为 解析常量后立即添加时间戳,以便在 如果需要值,将使用创建表的时间

您可以从
日期
中减去
整数

您不应该依赖于从窗口函数派生的排序顺序。添加一个明确的
订单依据

电话:

演出 您有100万x 200万行。这是2000000000种可能的组合。你的情况
t1.datex>(现在()::date-180)
稍微减少了一个方面,但仍然会有一个巨大的数字。geom列上适当的索引有很大帮助。这就可以解释为什么,, 有条件

SELECT * FROM public.masterx

。。只需要1秒钟。你把手术量减少了一百万倍。如果没有这种条件,则需要约100万倍的时间……

您能再显示一些吗?这将有助于查看失败的查询、您希望它们返回的内容、它们实际返回的内容以及它们正在操作的一些数据。尝试创建演示问题的最小数据子集。您可以通过单击“编辑”链接将此信息添加到问题中。1)请显示您用于从视图中选择的完整查询。2) 请向我们展示一些存在于基础表kadas和v7中的示例数据,以及您希望从视图中获得的该示例数据的结果。3) 在尝试将查询放入视图之前,您是否测试了视图中使用的查询?谢谢您提供的其他信息。我想可能还需要一些。当您说“没有解决方案”时,您的意思是查询不返回任何行,还是说查询太长以至于您或您的程序超时?另外:在描述问题中的表时,请使用psql中的
\d
命令,例如,`d table1'。这将显示列名、类型、索引等。如果这是一个性能问题,那么还要添加在查询中使用“explain”命令的结果。
CREATE OR REPLACE VIEW public.masterx AS 
SELECT row_number() OVER (ORDER BY st_distance(t1.geom, t2.geom)) AS rownum,
       t1.id_seq,
       t2.pars_id,
       st_distance(t1.geom, t2.geom) AS mesafe
FROM   v7    t1
JOIN   kadas t2 ON st_dwithin(t1.geom, t2.geom, 400::float8)
WHERE  t1.datex > (now()::date - 180)
ORDER  BY 1;
SELECT * FROM public.masterx
where t2.id = 12345