私はMySQLを初めて使用するので、潜在的な混乱に耐えてください。さまざまなメンバーシップサブタイプと、各サブタイプが特定の日に1時間あたりにチェックインした回数を表示するクエリを作成する必要があります。これが私がこれまでに思いついたものです:
SELECT
customers.CUSTOMER_CUSTOM_TYPE AS Subtype,
COUNT(CASE
WHEN checkins.POSTDATE BETWEEN '%17:00:00' AND '%17:59:59' THEN 1
ELSE 0
END) AS '5pm',
COUNT(CASE
WHEN checkins.POSTDATE BETWEEN '%18:00:00' AND '%18:59:59' THEN 1
ELSE 0
END) AS '6pm',
COUNT(CASE
WHEN checkins.POSTDATE BETWEEN '%19:00:00' AND '%19:59:59' THEN 1
ELSE 0
END) AS '7pm'
FROM
checkins,
customers
WHERE
checkins.CUSTOMER_ID = customers.CUSTOMER_ID
AND checkins.POSTDATE LIKE '2017-10-05%'
GROUP BY customers.CUSTOMER_CUSTOM_TYPE;
簡潔にするために、3時間しか含めていません。POSTDATEが変更されたにもかかわらず、1時間ごとに同じ数値を取得し続けます。テーブルの設定は正しいです:
他のより単純なクエリでは、特定の時間枠で顧客のCHECKIN_IDをカウントすることにより、チェックインをカウントしました。顧客には、チェックインするたびに異なる一意のチェックインIDが与えられます。これについては正しく行っていますか?もっと簡単な方法はありますか?どんな助けでも大歓迎です!
適切なjoin
構文の使用法を学びます。句にコンマを使用しないでくださいfrom
。
クエリのより単純なバージョンは次のようになります。
SELECT cu.CUSTOMER_CUSTOM_TYPE AS Subtype,
SUM( hour(ch.POSTDATE) = 17) AS `5pm`,
SUM( hour(ch.POSTDATE) = 18) as `6pm`,
SUM( hour(ch.POSTDATE) = 19) as `7pm`
FROM checkins ch JOIN
customers cu
ON ch.CUSTOMER_ID = cu.CUSTOMER_ID
WHERE DATE(ch.POSTDATE) = '2017-10-05'
GROUP BY cu.CUSTOMER_CUSTOM_TYPE;
ノート:
LIKE
パターンはでは機能しませんBETWEEN
。私はそれをより単純なものに置き換えましたHOUR()
。case
、必要ありません。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加