2017-03-04 3 views
1

私は、臨床グラフのデータセットを使用して再構成の問題に取り組んでいます。患者が30日以内に再入院しているとしましょう。つまり、これは、2回目の訪問日の最初の日付(訪問日)に30日を追加する必要があることを意味します。ここでCypherの日付プロパティにDaysを追加するにはどうすればよいですか?

はサイファークエリです:

MATCH(p:Person)-[r:PATIENT_HAS]->(e:Encounter) 
WITH p,e 
MATCH (p)-[r:PATIENT_HAS]-(e2:Encounter) WHERE e2.ADMIT_DATE < (e.ADMIT_DATE + 30) 

日付プロパティはYYYYMMDD形式であるため、このクエリは動作しません。たとえば、20151225の場合は20151255となりますが、30日を追加した後は20160124として取得する必要があります。 YYYYMMDD以外の形式を使用する方法はありますか?私はYYYY-MM-DDのような文字列形式があることを知っていますが、この形式を使用して日を追加する方法は何ですか?これを実現するにはどうすればよい

私はあなたの助けに感謝します。

+2

あなたは日付と時刻をサポートしています[APOCライブラリ](https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_date_time_support)を、使用して検討していますか? –

答えて

4

私の意見でのNeo4jの日付に対処するための最良の方法は、彼らがミリ秒または秒でUNIXエポック時間として保存することです。 Neo4jには、素晴らしいプロシージャーを使用できるようにする、apoc proceduresという素晴らしいプラグインがあります。あなたの特定のケースでは、私はapoc.date.*プロシージャを利用し、日付形式をエポック時間(秒)で解析します。

MATCH (e:Encounter) 
WITH e,apoc.date.parse(e.ADMIT_DATE,"s","YYYYMMDD") as unix 
set e.unix = unix 

だから今、あなたのクエリは次のようになります。このクエリを簡素化し、それを短くすることができますofcourseの

MATCH(p:Person)-[r:PATIENT_HAS]->(e:Encounter) 
MATCH (p)-[r:PATIENT_HAS]-(e2:Encounter) 
WHERE e2.unix < e.unix + (30 * 24 * 60 * 60) 

MATCH (e2:Encounter)-[r:PATIENT_HAS]-(p:Person)-[r:PATIENT_HAS]->(e:Encounter) 
WHERE e2.unix < e.unix + (30 * 24 * 60 * 60) 
+0

APOC手順を使用することで重複しています。そして、物事を簡単にするために、我々は、異なる時間単位を使用して時刻を追加するためのまもなくパイプラインを下って来るいくつかの新しい機能を持っているので、あなたは(あなたが好む場合、またはMS)の中には時間がかかるとせずに、時間の価値が30日に追加することができますあなた自身で乗算を行う。 '' apoc.date.add(e.unix、 's'、30、 'd')をthirtyDaysLaterInSecondsとして返すのと同じもの – InverseFalcon

+0

['apoc.date.add()'](https://neo4j-contrib.github。 io/neo4j-apoc-procedures /#_ adding_subtracting_time_unit_values_to_timestamps)をAPOCプロシージャで利用できるようになりました。あなたができる時にそれを試してみてください! – InverseFalcon

0

我々は一時的な解決策を見つけた:私たちは、設定されています過去の特定の日付(私たちの場合は2009年1月1日)は、最初の訪問(e.ADMIT_DATE-1/1/2009)と第二の訪問の間の差を取得している(e2.ADMIT_DATE-1/1/2009年)を日数としています。その後、第1回目と第2回目の訪問(e2.DAYS-e.DAYS)の差異を取得して、再開基準の30日を把握することができます。

私はAPOC手順プラグインをチェックアウトしていたし、それは少し複雑に見えました。しかし、私は間違いなくそれを再試行することができます。あなたの偉大な応答の人々のために多くのありがとう。

+1

あなたが使用している表現が正確である場合は注意してください。 '-1/1/2009'は、1を1で割った値を2009年に1を引いたもの(整数は浮動小数点ではないので整数)として解釈されます。 – InverseFalcon

関連する問題