我有一個表YEAR和MONTH列,它們是varchars,其格式類似於MONTH ='02',YEAR ='2011 」。Oracle SQL:獲取過去八個月的數據(使用YEAR和MONTH列)
我可以使用什麼查詢來獲取最近8個月的數據,不包括當前月份?
我有一個表YEAR和MONTH列,它們是varchars,其格式類似於MONTH ='02',YEAR ='2011 」。Oracle SQL:獲取過去八個月的數據(使用YEAR和MONTH列)
我可以使用什麼查詢來獲取最近8個月的數據,不包括當前月份?
嘗試
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)
這是一個強制的方法,所以不是如果你想讓你的查詢一般化,這是可行的。
這些都沒有得到七月。他們正在回到六月到十二月。 – Muhd
@Cybernate - 我相信你想在你的ADD_MONTHS調用中消除-1,並在你的CONNECT BY中執行<= 8。這將返回2010年12月至2011年7月。 –
@Muhd賈斯汀:我的壞..刪除-1 – Chandu