每月的最后一天加入第二张桌子

时间:2017-10-09 08:35:47

标签: sql oracle

我需要获取上个月的最后一天,然后将其加入另一个表格,以返回与日期相关的年/月列,但我正在努力实现我想要的目标。

我试过了:

SELECT b.yrmonth, LAST_DAY(ADD_MONTHS(SYSDATE,-1)) DT 
FROM dual a
INNER JOIN D_DAY b on DT = b.DT

年月只会返回表格中的所有内容,而不仅仅是一行,所以我们非常感谢任何帮助!

2 个答案:

答案 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(带时间组件,如果要查看日期,则需要之前投了它。