0

わかりましたので、現在の月に先行する月にすべての情報を返そうとしています。フォーマットとコードに少し苦労しています。これが私の試みです。必要に応じてテーブル構造を提供できます

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
4

2 に答える 2

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

于 2012-11-30T00:58:01.313 に答える
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この列のインデックスを無効にしないようにする必要があります。

于 2012-11-30T00:55:57.397 に答える