次のフィールドを持つテーブルがあります。
レポート (テーブル名) Rep_Date (日付) Rep_Time (日付)
Rep_Time フィールドには、'01/01/1753 07:30:00' のような値があります。つまり、時間部分が関連しています。次のクエリを作成しました。
select Reports.pid, MaxDate from Reports
INNER JOIN (
select pid, max(TO_DATE(TO_CHAR(REP_DATE, 'DD/MM/YYYY')
|| TO_CHAR(REP_TIME, 'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS')) As MaxDate
from reports
group by pid
) ReportMaxDate
on Reports.PID = ReportMaxDate.PID
AND To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
WHERE REPORTS.PID=61
クエリの派生テーブル部分が実行されますが、クエリ全体を実行すると、「有効な月ではありません」というエラーが表示されます。どうしてこれなの?
これをデバッグするために; 次のクエリを実行すると:
select rep_date, rep_time from reports where pid=61 and rownum=1
私は得る:
Rep_Date = 01/04/2009
Rep_Time = 01/01/1753 13:00:00
UPDATE 15:58 次のクエリを実行できるようになりました。
select Reports.pid, MaxDate from Reports
INNER JOIN (
select pid, max(TO_DATE(TO_CHAR(REP_DATE, 'DD/MM/YYYY')
|| TO_CHAR(REP_TIME, 'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS')) As MaxDate
from reports group by pid
) ReportMaxDate
on Reports.PID = ReportMaxDate.PID
AND to_date(to_char(maxdate,'MM/DD/YYYY'),'MM/DD/YYYY') = REP_DATE
WHERE REPORTS.PID=61
WHERE
ただし、 MaxDate の時間部分を rep_time: と比較する句にもう 1 つのステートメントを追加する必要がありto_date(to_char(maxdate,'MM/DD/YYYY'),'MM/DD/YYYY') = REP_DATE
ます。機能しません。