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

深夜の時間でグループ化されたデータを選択します

    編集 :現在テスト中です: SQL Fiddle

    重要なのは、group byを調整することです。 午前6時より前のすべてが前日とグループ化されるようにします。その後、カウントは非常に簡単です。

    SELECT TO_CHAR(CASE WHEN EXTRACT(HOUR FROM timevalue) < 6
                        THEN timevalue - 1
                        ELSE timevalue
                        END, 'YYYY\MM\DD') AS day, 
           COUNT(*) AS overall, 
           SUM(CASE WHEN EXTRACT(HOUR FROM timevalue) >= 6 AND EXTRACT(HOUR FROM timevalue) < 14
                    THEN 1 ELSE 0 END) AS morning,
           SUM(CASE WHEN EXTRACT(HOUR FROM timevalue) >= 14 AND EXTRACT(HOUR FROM timevalue) < 23
                    THEN 1 ELSE 0 END) AS daytime,
           SUM(CASE WHEN EXTRACT(HOUR FROM timevalue) < 6 OR EXTRACT(HOUR FROM timevalue) >= 23
                    THEN 1 ELSE 0 END) AS evening
    FROM my_table
    WHERE timevalue >= TO_TIMESTAMP('05.07.2015','DD.MM.YYYY')
    GROUP BY TO_CHAR(CASE WHEN EXTRACT(HOUR FROM timevalue) < 6
                        THEN timevalue - 1
                        ELSE timevalue
                        END, 'YYYY\MM\DD');
    


    1. 別のテーブルからランダムに選択された一意の値を使用して、テーブルの列を更新します

    2. MySQLの操作の順序?

    3. MariaDBでのBIT_LENGTH()のしくみ

    4. date_formatを含むSQLステートメントでのパラメーターの使用