ソースコード
SELECT
    SUB.ORDER_DATETIME AS ORDER_DATE
    , SUB.MEMBER_CODE AS CODE
    , CASE MM.OPTOUT_TYPE 
        WHEN 0 THEN '可' 
        WHEN 1 THEN '不可' 
        ELSE '不明' 
        END AS OPTOUT 
FROM
    ( 
        -- 会員毎に7月に初めて受注した日付を取得
        SELECT
            MEMBER_CODE
            , LAST_NAME
            , FIRST_NAME
            , MIN(ORDER_DATETIME) AS ORDER_DATETIME
            , MIN(DATE (ORDER_DATETIME)) AS M_DATE 
        FROM
            EC_ORDERS 
        WHERE
            -- DATE関数で日付のみに編集してから7月の受注データを抽出
            DATE (ORDER_DATETIME) BETWEEN '2023-07-01' AND '2023-07-31' 
        GROUP BY
            MEMBER_CODE 
    ) AS SUB 
    -- オプトアウト区分を取得するため、会員テーブルを内部結合
    INNER JOIN MEMBER_MST AS MM 
        ON SUB.MEMBER_CODE = MM.MEMBER_CODE 
WHERE
    -- 7月に初めて受注した日付から1年より前に、受注データがあるか存在チェック
    EXISTS ( 
        SELECT
            ORDER_NO 
        FROM
            EC_ORDERS 
        WHERE
            SUB.MEMBER_CODE = MEMBER_CODE 
            AND DATE (ORDER_DATETIME) < DATE (SUB.M_DATE, '-1 year')
    ) 
    -- 7月に初めて受注した前日から1年前までに、受注データが存在しないかチェック
    AND NOT EXISTS ( 
        SELECT
            ORDER_NO 
        FROM
            EC_ORDERS 
        WHERE
            SUB.MEMBER_CODE = MEMBER_CODE 
            AND DATE (ORDER_DATETIME) BETWEEN DATE (SUB.M_DATE, '-1 year') AND DATE (SUB.M_DATE, '-1 day')
    ) 
ORDER BY
    SUB.ORDER_DATETIME DESC
    , SUB.MEMBER_CODE DESC;
提出情報
提出日時2023/12/06 23:04:53
コンテスト第9回 SQLコンテスト
問題クーポン配布対象
受験者miho1027
状態 (詳細)AC
(Accepted: 正答)
メモリ使用量85 MB
メッセージ
テストケース(通過数/総数)
2/2
状態
メモリ使用量
データパターン1
AC
85 MB
データパターン2
AC
85 MB