テーブルの平均年齢を調べようとしていますが、レコードの一部には年として0000
があります。平均年齢ですが特定のレコードを除いて
平均年齢が高くなるので、これを回避するにはどうすればよいですか?
これは私が現在持っているものであり、それは112
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
テーブルの平均年齢を調べようとしていますが、レコードの一部には年として0000
があります。平均年齢ですが特定のレコードを除いて
平均年齢が高くなるので、これを回避するにはどうすればよいですか?
これは私が現在持っているものであり、それは112
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
アウトフィルター "古代" の誕生日を返します:WHERE
条件を追加する
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm.master_efields
where dob_yyyy != '0000'
てみてください。
Select AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
WHERE dob_yyyy <> '0000'
またCASE WHEN
を導入することにより、ゼロではないとdob_yyyy
を制限しようとすることができます。
Select AVG(CASE WHEN dob_yyyy <> '0000' THEN Datediff("yyyy",cast(dob_yyyy as int),getdate())) from ppm..master_efields
さらに、一部のフィールドで平均年齢を表示する場合は、そのフィールドをGROUP BYすることを忘れないでください。
まず、dob_yyyy
を整数にキャストする理由を教えてください。あなたは整数ではなく、日付を使うべきです。
dob_yyyy
を文字列として保存している場合は、アプリケーションを修正して日付として保存する必要があります。しかし、それはあなたがやっていることであると仮定すると、私はあなたがしたいと思う:
Select AVG(Datediff(year, cast(dob_yyyy as date), getdate()))
from ppm..master_efields
where dob_yyyy not like '%-0000';
か:
where dob_yyyy not like '0000-%';
文字列の形式によって異なります。
WHERE句を使用して、無効な日付とNULLの生年月日の値をスキップします。
Select
AVG(Datediff("yyyy",cast(dob_yyyy as int),getdate()))
from ppm..master_efields
WHERE (dob_yyyy IS NOT NULL) AND (dob_yyyy > '1900')
0000年を除外するにはwhere句を使用してください。 – Bob
ちょうど脇に...あなたは 'datediff()'を使って年齢を計算してもよろしいですか?私の50歳の誕生日が明日であれば、「デートフリート」は私にちょうど49歳であることを示します。 – Joe
'dob_yyyy'値の例を挙げることができますか? –