推奨される明示的な JOIN 表記と GROUP BY および HAVING 句を使用すると、以下を使用できるはずです。
SELECT i.itemid, i.name, i.price
FROM Item i
JOIN ItemComment c ON i.itemid = c.itemid
GROUP BY i.itemid, i.name, i.price
HAVING MAX(c.dateCommentPosted) < (ADD_MONTHS(SYSDATE, -6));
また、WITH 句を使用するか、FROM リストに直接サブクエリを記述して、各項目についてコメントが投稿された最新の日付を計算し、それを Item テーブルと結合することもできます。
コメントのないアイテムを選択するかどうかを検討することをお勧めします。
私も表示/選択したい場合はどうすればよいですかMax(c.dateCommentPosted)
。それはオプションですか?それをselect句に追加dateCommentPosted
し、GROUP BY句に追加すると、それは正しいでしょうか?
GROUP BY 句ではなく、select 句に追加します。
SELECT i.itemid, i.name, i.price, MAX(c.dateCommentPosted) AS dateCommentPosted
FROM Item i
JOIN ItemComment c ON i.itemid = c.itemid
GROUP BY i.itemid, i.name, i.price
HAVING MAX(c.dateCommentPosted) < (ADD_MONTHS(SYSDATE, -6));
AS を除外した方がよい場合もあります。私の知る限り、OracleはASをテーブルエイリアスで完全に拒否します(そのため、そこに残しました)が、選択リストの「列エイリアス」で受け入れます(ただし、必須ではありません)。
ちなみに、SQL 標準、したがって「すべての」SQL DBMS では、HAVING 句で集計比較が必要であり、HAVING 句には GROUP BY 句が必要です。したがって、GBH — Group By / 持つこと、および深刻な身体的危害。