2017-10-02 20 views
0
select 
     d.FK_SOCRD_ID, 
     d.SUBJECT_NUMBER, 
     c.PTLASTNAME || ', ' || c.PTFIRSTNAME as "Patient name", 
     min(b.created) as Data Entry 1, 
     max(b.created) as Data Entry 2, 
     min(b.created) - max(b.created) 
     || ' days and ' 
     || TO_CHAR(to_date('01/01/2000', 'MM-DD-YYYY') 
       + (b.created - b.created), 'HH24:MI:SS') AS Diff 
    FROM 
     CR_MDT a 
     full outer join CR_MDT_VERIFY b 
      on a.CR_MDT_ID = b.FK_CR_MDT_ID 
     left join patient c 
      on a.FK_SOCRD_ID = c.SOCRD_ID 
      left join PT_STUDY d 
       on c.SOCRD_ID = d.FK_SOCRD_ID 
    where 
      a.CR_MDT_DT between TO_DATE('01/01/2017', 'mm/dd/yyyy') 
     and TO_DATE('12/31/2017', 'mm/dd/yyyy') 
    group by 
     d.FK_SOCRD_ID, 
     d.SUBJECT_NUMBER, 
     c.PTLASTNAME, 
     c.PTFIRSTNAME, 
     b.created 

min(b.created)からmax(b.created)を減算するにはどうすればよいですか?私はこの部分にこだわっている:
同じ列から最大値と最小値を減算する

|| TO_CHAR(to_date('01/01/2000', 'MM-DD-YYYY') 
     + (b.created - b.created), 'HH24:MI:SS') AS Diff 

私はb.created maxとminは同じ列からあるので、減算部を作成する方法についてのヘルプを必要としています。

+0

私はOracleを使用しています。 –

答えて

0

ここに希望の結果をもたらしたものがあります:

SELECT
d.FK_SOCRD_ID、
d.SUBJECT_NUMBER、
c.PTLASTNAME || '、' || max_created、
TRUNC(MAX(b.created))AS min_created、
最大(b.created)AS "患者名" AS c.PTFIRSTNAME、
分(b.created) - TRUNC(分(b.created ))|| '日' AS差分
CR_MDT FROM
はFULL PT_STUDYさd
をJOIN c.SOCRD_ID = a.FK_SOCRD_ID
左側に患者C
をJOIN a.CR_MDT_ID = b.FK_CR_MDT_ID
左側に
bはCR_MDT_VERIFYをJOIN ON_D.FK_SOCRD_ID = c.SOCRD_ID
ここでa.CR_MDT_DT_TO_DATE('01/01/2017 '、' mm/dd/yyyy ')とTO_DATE
('12/31/2017'、 'mm/dd/yyyy ')
GROUP BY d.FK_SOCRD_ID、
d.SUBJECT_NUMBER、
c.PTLASTNAME、
c.PTFIRSTNAME

0

あなたは、サブクエリで、そのクエリを入れて、外部の減算を行うことができます。

SELECT * 
    , max_created - min_created as date_difference 
FROM 
(
SELECT d.FK_SOCRD_ID 
    , d.SUBJECT_NUMBER 
    , c.PTLASTNAME || ', ' || c.PTFIRSTNAME AS "Patient name" 
    , min(b.created) AS min_created 
    , max(b.created) AS max_created 
FROM CR_MDT a 
FULL JOIN CR_MDT_VERIFY b 
    ON a.CR_MDT_ID = b.FK_CR_MDT_ID 
LEFT JOIN patient c 
    ON c.SOCRD_ID = a.FK_SOCRD_ID 
LEFT JOIN PT_STUDY d 
    ON d.FK_SOCRD_ID = c.SOCRD_ID 
WHERE a.CR_MDT_DT BETWEEN TO_DATE('01/01/2017', 'mm/dd/yyyy') AND TO_DATE('12/31/2017', 'mm/dd/yyyy') 
GROUP BY d.FK_SOCRD_ID 
    , d.SUBJECT_NUMBER 
    , c.PTLASTNAME 
    , c.PTFIRSTNAME 
) subq 

あなたが使用しているDBMSに応じて、DATEDIFF関数を変更する必要があります。

EDIT:Oracleを使用していることがわかったところで、日付減算部分を更新しました。

+0

私は何か間違っている可能性があります。私はまだ助けが必要です。 ORA-00933:SQLコマンドが正しく終了しません。 これを最後のサブクエリとして配置しました。 min(b.created) - max(b.created) || 'days and' || TO_CHAR(to_date('01/01/2000 '、' MM-DD-YYYY ')をDiff の順番で作成します。 ' –

+0

サブクエリではなく外部クエリでこの減算を行う必要があります。上記の更新されたクエリ? –

+0

申し訳ありませんが、ORA-00923:FROMキーワードが見つかりませんでした。 SELECT * 、 max(created) - min(created)as date_differenceとして問題を修正しましたが、同じora-00923エラーが発生します。すべての助けに感謝します。 –

0

あなたがここのように、差の小数部だけを残し、hh24:mi:ssに変換し、floor()を使用することができます。

select id, mx, mn, floor(diff) ||' days and '|| 
     to_char(trunc(sysdate) + diff - floor(diff), 'hh24:mi:ss') diff 
    from (select id, max(created) mx, min(created) mn, 
       max(created) - min(created) diff 
      from test group by id) 

テストデータ:

create table test (id number(3), created date); 
insert into test values (1, timestamp '2017-09-12 01:00:00'); 
insert into test values (1, timestamp '2017-11-05 11:24:17'); 
insert into test values (1, timestamp '2017-12-15 13:42:05'); 
insert into test values (2, timestamp '2017-01-05 11:00:00'); 
insert into test values (2, timestamp '2017-06-05 23:12:56'); 

結果:

ID MX     MN     DIFF 
---- ------------------- ------------------- --------------------- 
    1 2017-12-15 13:42:05 2017-09-12 01:00:00 94 days and 12:42:05 
    2 2017-06-05 23:12:56 2017-01-05 11:00:00 151 days and 12:12:56 
+0

ORA-00904:「DIFF」:識別子エラーが無効です。 –

+0

クエリをコピー&ペーストするとエラーは発生しません。だからあなたは何かを逃しました、おそらく列エイリアス。この論理に従えば、必要なものを手に入れることができます。 –

関連する問題