好的,所以我试图在当月之前的一个月内返回所有信息。我在格式和代码方面略有困难。这是我的尝试。 如果需要,我可以提供表格结构
SELECT hd.Holiday_desc,
soh.Site_Name,
FROM holiday_details hd
WHERE TRUNC(LAST_DAY(SYSDATE), 'MM' - 1) = TRUNC(hdep.Holiday_Departure, 'MM')
INNER JOIN holiday_departure hdep
ON hd.holiday_code = hdep.holiday_code
Inner join site_visited sv on hd.Holiday_Code = sv.Holiday_code
inner join site_of_holiday soh on sv.Site_code = soh.Site_code
答案 0 :(得分:1)
我会使用ADD_MONTHS()
函数和BETWEEN
运算符来完成此任务:
SELECT hd.Holiday_desc,
soh.Site_Name,
FROM holiday_details hd
WHERE hdep.Holiday_Departure BETWEEN trunc(add_months(sysdate,-1),'MM')
AND last_day(add_months(sysdate,-1)) + .99999
INNER JOIN holiday_departure hdep
ON hd.holiday_code = hdep.holiday_code
Inner join site_visited sv on hd.Holiday_Code = sv.Holiday_code
inner join site_of_holiday soh on sv.Site_code = soh.Site_code;
此外,如果您的列hdep.Holiday_Departure
已编入索引,则您希望避免使用TRUNC
函数,这样就不会使此列上的任何索引无效。
答案 1 :(得分:1)
我想你想要
SELECT
hd.Holiday_desc,
soh.Site_Name
FROM holiday_details hd
INNER JOIN holiday_departure hdep
ON hd.holiday_code = hdep.holiday_code
INNER JOIN site_visited sv
ON hd.Holiday_Code = sv.Holiday_code
INNER JOIN site_of_holiday soh
ON sv.Site_code = soh.Site_code
WHERE
TRUNC(hdep.Holiday_Departure, 'MM') = ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)
您需要了解一下语法。 'MM' - 1
不起作用,就像在查询中间有一个WHERE
子句一样。 :)此外,在FROM
之前有许多逗号。