小编jat*_*bat的帖子

使用PostgreSQL中的查询结果更新列

我在PostgreSQL 9.2中有下表,其中包含时间戳:

GID [PK](BIGSERIAL),timestamp_mes(时间戳没有时区),time_diff(间隔)
1,2012-01-23 11时03分40秒,空
2,2012-01-23 11时03分42秒,空
3, 2012-01-23 11:03:44,空的

我添加了一个间隔列(time_diff),并希望用此查询产生的时差值填充它:

SELECT timestamp_mes - lag(timestamp_mes, 1) 
over (order by timestamp_mes) as diff
from gc_entretien.trace order by timestamp_mes
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询来更新time_diff列,但没有成功:

UPDATE gc_entretien.trace set time_diff = 
(SELECT trace.timestamp_mes - lag(trace.timestamp_mes, 1) 
over (order by trace.timestamp_mes) 
from gc_entretien.trace order by timestamp_mes);
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

错误:用作表达式的子查询返回的多行

我应该如何使用时差查询生成的值更新time_diff列?

sql database postgresql sql-update postgresql-9.2

13
推荐指数
2
解决办法
1万
查看次数

拆分单个SpatialPolygons对象的多边形部分

在R中,我有SpatialPolygons包含几百个多边形的单个对象(即多多边形).我想将此SpatialPolygons对象拆分为一个列表Polygons(即孔应保持附加到父多边形).

知道怎么做吗?

编辑:

使用sp包中提供的以下示例:

# simple example, from vignette("sp"):
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)

Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
Run Code Online (Sandbox Code Playgroud)

然后跑out = lapply(SpP@polygons, slot, "Polygons").我得到三个列表Polygons(即Srs1,Srs2,Srs3).

但是,我试图解决的情况与此示例略有不同.SpatialPolygons我试图拆分的对象是使用gUnaryUnion函数(在RGEOS包中)完成几何联合的结果.如果我申请out <- lapply(merged.polygons@polygons, slot, "Polygons"),我会获得一个唯一的Polygon对象列表(nb不是Polygons …

r spatial polygons

10
推荐指数
2
解决办法
6823
查看次数

使用psql\copy导入带有时间戳列(.dd.mm.yyyy hh.mm.ss)的.csv

我正在尝试使用psql \COPY命令(而不是SQL COPY)将.csv文件中的数据导入到postgresql 9.2数据库中.

输入.csv文件包含一个时间戳为dd.mm.yyyy hh.mm.ss格式的列.

我使用了将数据库日期样式设置为DMY.

set datestyle 'ISO,DMY'
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我运行\COPY命令时:

\COPY gc_test.trace(numpoint,easting,northing,altitude,numsats,pdop,timestamp_mes,duration,ttype,h_error,v_error) 
FROM 'C:\data.csv' WITH DELIMITER ';' CSV HEADER ENCODING 'ISO 8859-1'
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:日期/时间字段值超出范围:"16.11.2012 07:10:06"

提示:也许你需要一个不同的"日期风格"设置.

语境:COPY trace,第2行,列timestamp_mes:"16.11.2012 07:10:06"

datestyle有什么问题?

csv postgresql timestamp postgresql-9.2 psql

9
推荐指数
1
解决办法
2万
查看次数

取消列出数据框中的所有列表元素

我有一个数据框,每列有以下变量类:

"date" "numeric" "numeric" "list" "list" "numeric"
Run Code Online (Sandbox Code Playgroud)

每行中的数据如下所示:

    1978-01-01, 12.5, 6.3, c(0,0,0.25,0.45,0.3), c(0,0,0,0.1,0.9), 72
Run Code Online (Sandbox Code Playgroud)

我想将其转换为矩阵或数据框,每列一个值,因此结果应如下所示:

1978-01-01, 12.5, 6.3, 0, 0, 0.25, 0.45, 0.3, 0, 0, 0, 0.1, 0.9, 72
Run Code Online (Sandbox Code Playgroud)

我尝试过使用:

j<-unlist(input)
output<-matrix(j,nrow=nrow(input),ncol=length(j)/nrow(input))
Run Code Online (Sandbox Code Playgroud)

但它会混淆输出中行的顺序.

任何的想法?

附加信息:

上面的示例略有简化,并dput(head(input))返回以下示例:

structure(list(DATE = structure(c(2924, 2925, 2926, 2927, 2928, 
2929), class = "Date"), TEMP_MEAN_M0 = c(-7.625, -7.375, -6, 
-5.5, -7.625, -9.625), SLP_MEAN_M0 = c(1012.125, 991.975, 989.825, 
986.675, 988.95, 993.075), WIND_DIR_RF_M0 = structure(list(`2.counts` = c(0, 
0.625, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
Run Code Online (Sandbox Code Playgroud)

r dataframe

9
推荐指数
1
解决办法
3万
查看次数