0

dhis2 にアップロードされた集計レポートのタイム スタンプを格納するテーブルを探しています。SQL ビューを使用して作成しているレポートにそのデータが必要です。タイムスタンプ列を持つ datavalueaudit というテーブルを見つけることができましたが、試行するすべてのクエリで、集計レポートを構成するデータ要素のタイムスタンプが取得されます。私はまだ sql と dhis2 の初心者なので、問題を解決する方法がわかりません。私はある程度理解しているが、それでもやや複雑なクエリを変更しようとしています

以下は元のクエリです

SELECT DISTINCT p.startdate, prov.name AS Province, par.name AS cheifdom, ou.name AS Village, regexp_replace(ou.phonenumber, '+260', '0'), CASE WHEN b.reported IS NULL THEN 0: :integer ELSE 1::integer END AS report FROM datasetsource dss CROSS JOIN (SELECT DISTINCT periodid, startdate FROM period WHERE startdate <= now() AND periodtypeid = (SELECT periodtypeid FROM periodtype WHERE name ='Monthly') ORDER BY startdate DESC OFFSET 1 LIMIT 12) p LEFT JOIN (SELECT DISTINCT dv.sourceid, dv.periodid, TRUE AS report FROM datavalue dv INNER JOIN (SELECT DISTINCT periodid, startdate FROM period WHERE startdate <= now() AND periodtypeid = (SELECT periodtypeid FROM periodtype WHERE name ='Monthly') ORDER BY startdate DESC OFFSET 1 LIMIT 12) a ON dv.periodid = a.periodid WHERE dv.dataelementid IN (SELECT DISTINCT dataelementid FROM datasetmembers WHERE datasetid = (SELECT datasetid FROM dataset WHERE uid = 'Hbcr2fLc9jM'))) b ON b.sourceid = dss.sourceid AND b.periodid = p.periodid INNER JOIN organisationunit ou ON dss.sourceid = ou.organisationunitid INNER JOIN organisationunit par ON ou.parentid = par.organisationunitid INNER JOIN organisationunit prov ON par.parentid = prov.organisationunitid INNER JOIN _periodstructure ps ON p.periodid = ps.periodid WHERE dss.datasetid = (データセットからデータセット ID を選択WHERE uid = 'Hbcr2fLc9jM') prov.name、par.name、ou.name、p.startdate による順序organisationunitid INNER JOIN organisationunit par ON ou.parentid = par.organisationunitid INNER JOIN organisationunit prov ON par.parentid = prov.organisationunitid INNER JOIN _periodstructure ps ON p.periodid = ps.periodid WHERE dss.datasetid = (SELECT datasetid FROM dataset WHERE uid = 'Hbcr2fLc9jM') ORDER BY prov.name、par.name、ou.name、p.startdateorganisationunitid INNER JOIN organisationunit par ON ou.parentid = par.organisationunitid INNER JOIN organisationunit prov ON par.parentid = prov.organisationunitid INNER JOIN _periodstructure ps ON p.periodid = ps.periodid WHERE dss.datasetid = (SELECT datasetid FROM dataset WHERE uid = 'Hbcr2fLc9jM') ORDER BY prov.name、par.name、ou.name、p.startdate

以下は私が変更してみたものです

SELECT DISTINCT p.startdate, prov.name AS Province, par.name AS cheifdom, ou.name AS Village, regexp_replace(ou.phonenumber, '+260', '0'), CASE WHEN b.reported IS NULL THEN 0: :integer ELSE 1::integer END AS report, dva.timestamp AS "Reports On Time" FROM datasetsource dss CROSS JOIN (SELECT DISTINCT periodid, startdate FROM period WHERE startdate <= now() AND periodtypeid = (SELECT periodtypeid FROM periodtype WHERE name ='Monthly') ORDER BY startdate DESC OFFSET 1 LIMIT 12) p LEFT JOIN (SELECT DISTINCT dv.sourceid, dv.periodid, TRUE AS reported FROM datavalue dv INNER JOIN (SELECT DISTINCT periodid, startdate FROM period WHERE startdate <= now( ) AND periodtypeid = (SELECT periodtypeid FROM periodtype WHERE name ='Monthly') ORDER BY startdate DESC OFFSET 1 LIMIT 12) a ON dv.periodid = a.periodid WHERE dv.dataelementid IN (SELECT DISTINCT dataelementid FROM datasetmembers WHERE datasetid = (SELECT datasetid FROM dataset WHERE uid = 'Hbcr2fLc9jM'))) b ON b.sourceid = dss.sourceid AND b.periodid = p.periodid LEFT JOIN ( SELECT DISTINCT dv.timestamp, dv.periodid, TRUE AS reported FROM datavalueaudit dv INNER JOIN (SELECT DISTINCT periodid, startdate FROM period WHERE startdate <= now() AND periodtypeid = (SELECT periodtypeid FROM periodtype WHERE name ='Monthly') ORDER BY startdate DESC OFFSET 1 LIMIT 12) a ON dv.periodid = a.periodid WHERE dv.dataelementid IN (SELECT DISTINCT MAX(dataelementid) FROM datasetmembers WHERE datasetid = '29827' GROUP BY datasetid)) k ON k.periodid = p.periodid INNER JOIN organisationunit ou ON dss.sourceid = ou.organisationunitid LEFT JOIN datavalueaudit dv ON dss.sourceid = dv.organisationunitid INNER JOIN datavalueaudit dva ON k.timestamp = dva.timestamp INNER JOIN organisationunit par ON ou.parentid = par.organisationunitid INNER JOIN organisationunit prov ON par.parentid = prov.organisationunitid INNER JOIN _periodstructure ps ON p.periodid = ps.periodid WHERE dss.datasetid = (SELECT datasetid FROM dataset WHERE uid = 'Hbcr2fLc9jM') prov.name、par.name、ou.name、p.startdate、dva.timestamp によるオーダー開始日、dva.timestamp開始日、dva.timestamp

修正しようとしたクエリは、完成した集計レポートがアップロードされたときのタイム スタンプではなく、完成した集計レポートのデータセット内のすべてのデータ要素がアップロードされたときのタイム スタンプのみを取得します。

タイム スタンプ データを格納するテーブルからタイム スタンプ データを取得する新しい列を追加したいと考えていますが、完了した集計レポート*(レコード) がアップロードされた場合のみです。

4

1 に答える 1

0

DHIS 2 には集計レポートの直接的な概念はありません。datavalueテーブルの作成された列を見ると、概算がわかります。データ アップロード クライアントがデータ値セットを使用し、completeプロパティをtrueに設定して、完全なデータ セット登録を効果的に作成する場合、レコードのcompletedatasetregistrationテーブルをクエリできます。

于 2016-08-22T17:15:01.503 に答える