私は結果をテキストファイルにエクスポートするクエリを持っています。コードは以下のとおりです。PostgreSQLからテキストファイルをスライスでエクスポートする(年単位のテキストファイルの配布)
Copy (
Select
foo.gid As addr_ID,
bar.geom As streets,
St_LineInterpolatePoint
(ST_LineMerge(bar.geom),
St_LineLocatePoint
(St_LineMerge(bar.geom),foo.geom)
) As interpolated_point
FROM foo
Left JOIN bar ON ST_DWithin(foo.geom, bar.geom, 50)
ORDER BY
foo.gid, St_Distance(foo.geom, bar.geom)
)
To '~path/my_file.txt' WITH DELIMITER ',';
テーブル 'foo'には87行が含まれ、 'bar'には16,060行が含まれています。テーブル「FOO」も2列「のstart_time」と、このような変化の年の間隔を描いた「END_TIME」が含まれています
Start_time End_time
2003-06-07 00:00:00 2004-09-30 23:59:59
2004-02-03 00:00:00 2005-03-10 23:59:59
2003-07-09 00:00:00 2012-05-06 23:59:59
それは毎年のようにするためのテキストファイルを生成するように私は私の選択クエリの結果をエクスポートしたいと思いますこの:
予想される出力:
results_2003.txt
results_2004.txt
results_2005.txt
and so on...
誰かがそれを行うにはどのように私を提案することはできますか?私はPostgreSQLバージョン9.5(x64)をWindows 7 Enterprise(x64)で使用しています。
EDIT(1):
テキストファイルは、例えば、毎年のためにエクスポートする必要があります「のstart_time」と「END_TIME」の列では、下限は2003で、上限はその後、2012ファイルである場合期待される成果に示されるように毎年輸出される必要がある。
EDIT(2):
は、これまでのところ、私は完全に動作するコードを開発するために(コードおよび推奨リンクについて@Phillipに多くのおかげで)しようとしているが、私は繰り返し取得していますように私が問題に実行しています構文エラーです。 。私は、コードを掲載している以下のエラーが「構文エラーまたはその付近 『と言う1』(Where句)(再びCREDITはフィリップに行く):。
-- In the below code: Addr, streets, agfisotime (start time in data type timestamp) and agtisotime (end time in data type timestamp) are original columns
DO $$
DECLARE
start_year date;
end_year date;
current_year date;
file_name text;
BEGIN
select date_trunc('year', min(agfisotime)), date_trunc('year', max(agtisotime))
into start_year, end_year
from Addr;
FOR current_year IN
SELECT * FROM generate_series(start_year, end_year, interval '1 year')
LOOP
Execute format('
Copy(
Select
Addr.gid As addr_ID,
streets.geom As streets,
St_LineInterpolatePoint(ST_LineMerge(streets.geom),
St_LineLocatePoint(St_LineMerge(streets.geom),Addr.geom))
As interpolated_point
FROM Addr
Left JOIN streets ON ST_DWithin(Addr.geom, streets.geom, 50)
WHERE agfisotime < current_year + interval '1 year'
AND agtisotime >= current_year
ORDER BY
Addr.gid, St_Distance(Addr.geom, streets.geom)
) TO ''C:/temp/out.csv'';
',current_year);
END LOOP;
RETURN;
END
$$
2003年に開始して2005年に終了してから、どのファイルを表示する必要がありますか? 2003年、2004年、2005年、またはそれらのすべて? –
@PhilipCouling: 'start_time'と 'end_time'の2つの列には、2003年から2007年の範囲の年が含まれ、各年のテキストファイルを別々にエクスポートする必要があります(その年のすべてのレコードを含む年ごとに1つのファイル)。だから、具体的に答えを与える:それらのすべて。 –