2016-07-05 14 views
0

私はoracleデータベースで実行しています。私は25歳に達する前に治療を受けたすべての受血者を探したい。私は少なくとも500があることを知っていますが、私が得る結果は0です。明らかに私の質問は間違っています。だから私は問題が私が日付を引く方法であると思う。彼らはどちらもテーブルの日付の型です。私が見ていることから、2つの日付を減算するだけでよいのですか? DATEDIFFを使用していると書いている人もいますが、これは私にとっては役に立ちません。2つの日付からの計算年月

select count(*) FROM V_Persons 
    where exists(select * from res_tx res, recipient rec, Treatment tr 
       where (tr.TREAT_DATE - rec.DATE_OF_BIRTH) < 25 
       and rec.ident = res.ident 
       and rec.ident = tr.ident) 
+0

あなたはちょうど2つの日付を引くことができますが、Oracleの日付の基本的なarithmaticは、日中に答えを与えます。 – OTTA

答えて

0

あなたはサブクエリを存在する内部クエリ内にそれを期待するとして、日付差が動作している場合は、トラブルシューティングするために、これを試してみてください。

select * , (tr.TREAT_DATE - rec.DATE_OF_BIRTH) as DateDifference 
from res_tx res, recipient rec, Treatment tr 
       where (tr.TREAT_DATE - rec.DATE_OF_BIRTH) < 25 
       and rec.ident = res.ident 
       and rec.ident = tr.ident 
+1

'date_a - date_b'は2つの日付の間の日数の差を示します - これは、**日付の間に** 25日**の違いがあるかどうかを確認することです。 – MT0

3
SELECT COUNT(*) 
FROM V_Persons p 
WHERE EXISTS(
    SELECT 'X' 
    FROM recipient c 
     INNER JOIN Treatment r 
     ON (c.ident = r.ident) 
     INNER JOIN res_tx s  -- Do you need to join this table? 
     ON (c.ident = s.ident) 
    WHERE r.TREAT_DATE < ADD_MONTHS(c.DATE_OF_BIRTH, 25 * 12) 
    AND p.ident = c.ident   -- You need to correlate with the outer query. 
); 
+0

add_monthsはoracleで機能しますか? –

+0

はい。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions004.htm –

関連する問題