Sql 表或视图中的行号()?
它创建一个视图。当我使用“从表中选择”时,它会给出一个结果,但当我从上面的视图中选择时,没有结果。有什么问题 表t1为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
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