我需要获取上个月的最后一天,然后将其加入另一个表格,以返回与日期相关的年/月列,但我正在努力实现我想要的目标。
我试过了:
SELECT b.yrmonth, LAST_DAY(ADD_MONTHS(SYSDATE,-1)) DT
FROM dual a
INNER JOIN D_DAY b on DT = b.DT
年月只会返回表格中的所有内容,而不仅仅是一行,所以我们非常感谢任何帮助!
答案 0 :(得分:1)
您的查询是有效的:
SELECT b.yrmonth,
'some constant masking b.DT' DT
FROM dual a
INNER JOIN
D_DAY b
on ( b.DT = b.DT ) -- Always true
您无需加入DUAL
表,需要在WHERE
子句中过滤您的表格。
如果DT
日期列包含不同的时间组件:
SELECT yrmonth, dt
FROM D_DAY
WHERE DT >= TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)))
AND DT < TRUNC(SYSDATE,'MM');
(这将允许数据库使用DT
列上的索引)
或者,如果您的DT
列始终在午夜时间具有时间组件的日期:
SELECT yrmonth, dt
FROM D_DAY
WHERE DT = TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)));
答案 1 :(得分:0)
您不需要加入dual
表。您只需在where
子句中添加条件:
select *
from D_DAY b
where TRUNC(b.DT) = TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1))
并将date
(带时间)转换为date
,因为LAST_DAY
函数返回date
(带时间组件,如果要查看日期,则需要之前投了它。