私は、MONTH = '02'、YEAR = '2011のような形式を持つVARCHARである列YEARおよびMONTHを持つ表を持っています。 'Oracle SQL:データの最後の8か月を取得する(YEARおよびMONTH列を使用)
現在の月を除く過去8か月のデータを取得するために使用できるクエリは何ですか?
私は、MONTH = '02'、YEAR = '2011のような形式を持つVARCHARである列YEARおよびMONTHを持つ表を持っています。 'Oracle SQL:データの最後の8か月を取得する(YEARおよびMONTH列を使用)
現在の月を除く過去8か月のデータを取得するために使用できるクエリは何ですか?
これらは7月に取得されていません
where to_date(year || month, 'YYYYMM')
between add_months(trunc(sysdate, 'MM'), -8) and trunc(sysdate)
これを試してみてください:
SELECT *
FROM myTable
WHERE (year, month) IN
(
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'RRRR') AS year,
TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'MM') AS month
FROM dual
CONNECT BY LEVEL < 8
)
別のバージョン:
はSELECT *
FROM myTable
WHERE year||month IN
(
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'RRRRMM') AS yearmonth
FROM dual
CONNECT BY LEVEL < 8
)
私は考えることができるベストはこれです:
SELECT * FROM table WHERE (MONTH || YEAR) IN ('012011','122010', et cetera)
ことはないので、それは、強引な方法であり、クエリを一般化したい場合は実行可能です。
を試してみてください。彼らは6月から12月に戻る。 – Muhd
@Cybernate - あなたはあなたの 'ADD_MONTHS'呼び出しで-1を取り除き、あなたのCONNECT BYで<= 8をしたいと思っています。それは2010年12月から2011年7月まで返されます。 –
@Muhd Justin:私の悪い.. – Chandu