sql >> データベース >  >> RDS >> Mysql

日付部分のMySQLクエリ

    これは基本的にMostyの回答と同じですが、LEFT JOINを使用して、1回だけ発生するイベントを取得します。これにより、今日のすべてのイベントが取得されます。

    SELECT *
    FROM `tblEvent`
    LEFT JOIN `tblEventRecurring`
        ON `tblEvent`.`id` = `tblEventRecurring`.`event_id`
    WHERE (`tblEvent`.`date` = CURRENT_DATE AND `tblEventRecurring`.`event_id` IS NULL)
    OR (
        CURRENT_DATE BETWEEN `tblEvent`.`date` AND `tblEventRecurring`.`end_date`
        AND (
            (`tblEventRecurring`.`date_part` = 'D') OR
            (`tblEventRecurring`.`date_part` = 'W' AND DAYOFWEEK(`tblEvent`.`date`) = DAYOFWEEK(CURRENT_DATE)) OR
            (`tblEventRecurring`.`date_part` = 'M' AND DAYOFMONTH(`tblEvent`.`date`) = DAYOFMONTH(CURRENT_DATE))
        )
    )
    

    これがあなたに役立つかどうかはわかりませんが、今行ったように投稿すると思いました

    SELECT *
    FROM `date_list`
    LEFT JOIN (
        SELECT `tblEvent`.`id`, `tblEvent`.`date`, `tblEvent`.`name`, `tblEventRecurring`.`date_part`, `tblEventRecurring`.`end_date`
        FROM `tblEvent`
        LEFT JOIN `tblEventRecurring`
            ON `tblEvent`.`id` = `tblEventRecurring`.`event_id`
    ) AS `events`
        ON (
            `events`.`date` = `date_list`.`date`
        )
        OR (
            `date_list`.`date` BETWEEN `events`.`date` AND `events`.`end_date`
            AND (
                (`events`.`date_part` = 'D') OR
                (`events`.`date_part` = 'W' AND DAYOFWEEK(`events`.`date`) = DAYOFWEEK(`date_list`.`date`)) OR
                (`events`.`date_part` = 'M' AND DAYOFMONTH(`events`.`date`) = DAYOFMONTH(`date_list`.`date`))
            )
        )
    WHERE `date_list`.`date` BETWEEN '2012-02-06' AND '2012-02-12'
    ORDER BY `date_list`.`date`;
    

    date_listを想定しています 単一のdateで構成されるテーブル 日付の連続リストを含むフィールド。



    1. Javaを使用してSSH経由でリモートMySQLデータベースに接続します

    2. PostgreSQLの日付から日を取得する

    3. 永続ログインPHPおよびSQL

    4. 複数の列にFULLTEXTインデックスを作成するにはどうすればよいですか?