2012-04-17 4 views
1
SELECT * 
FROM CLIENT 
WHERE CLIENT_REG_DATE > DATEADD(year,-1,GETDATE()) 
GROUPBY MONTH(CLIENT_REG_DATE). 

を数える私はアペックスオラクルに入れ、それを実行し、それがDATEADDもOracleでgetdate()month()機能でもないがあり私のSQLには何がありますか?毎月、クライアントは昨年に来て何回

SQL command not properly ended 
+0

多分それはあなたのSQLコマンドがで終わる小数点だ...多分あなたは試みることができますセミコロン? –

+0

DATE_ADD()を検索している可能性があり、負の値になるため、DATE_SUB(日付、INTERVAL expr unit)を使用することができます。 – wachpwnski

+0

件名を修正してください。 「*は何ですか?」と正確には何を意味しますか? –

答えて

4

語ります。利用可能なすべての日付関数のリストについては

、取扱説明書を参照してください。
http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions002.htm#i88891

と文;

で終了する必要があり、あなたがSELECT *を使用している場合、グループによっては間違いなくありますどちらもうまくいかない。

あなたがグループに欲しいものをより詳細に指定がなければ、それは伝えるのは難しいですが、このような何かを始める:

SELECT to_char(client_reg_date, 'yyyy-mm'), count(*) 
FROM CLIENT 
WHERE CLIENT_REG_DATE > add_months(sysdate, -12) 
GROUP BY to_char(client_reg_date, 'yyyy-mm') 
+0

これは、奇妙なケースでエラーが発生する可能性があるので、私はこのような間隔の算術を使用することに少し注意するでしょう。たとえば、2012年2月29日から1年間を差し引くと、2011年2月29日が存在しないため、エラーが発生します。代わりに 'add_months(sysdate、-12)'を使うと、2011年2月28日になるでしょう。 –

+0

@JustinCave:あなたは正しい、良い点です。ありがとう。 (私はいつもその不一致を忘れる) –

関連する問題