MYSQL 関連の問題をもう一度解決しようとしています。最初は単純に聞こえますが、今では頭痛の種になっています。私は多数のスニペットを読み、数日間実験しましたが、残念ながら、完璧な解決策を見つけるという点ではあまり成功していません.
私は2つのテーブルを持っています。最初のテーブルには通話が含まれており、各通話は最初のテーブルの行で表され、次の 3 つの列があります。
p_key (INT)、call_date (DATE)、call_time (TIME)
2 番目のテーブルには特定のイベントが含まれており、これも 3 つの列があります。
event_id (INT)、event_start (DATETIME)、event_end (DATETIME)
最初のテーブル (呼び出しテーブル) から、同じ日付のイベント テーブルの開始と終了の間の時間内に収まらないエントリのみをカウントしたいと思います。
私の主な問題は、単一の日付に対してイベント テーブルに複数のエントリが存在する可能性があることです (例: 0800 から 1000 までのイベントと、同じ日の 1400 から 1600 までの別のイベント )。それ以外の場合は、単純に BETWEEN 構文を使用できます。
私はそれがこれに影響を与える何かかもしれないと思います:
SELECT
SUM(
CASE WHEN t1.p_key != 0
THEN 1 ELSE 0 END
) AS brt,
SUM(
CASE WHEN t1.p_key != 0
AND t1.call_time NOT BETWEEN TIME(t2.event_start) AND TIME(t2.event_end)
THEN 1 ELSE 0 END
) AS net
FROM call_table t1 INNER JOIN event_table t2
ON t1.call_date = DATE(t2.event_start)
WHERE t1.call_date >= '2013-09-01'
AND t1.call_date <= '2013-09-30'
GROUP BY DAY(t1.call_date)
残念ながら、このクエリは結果を返しません。
誰かが私を大まかな方向に向けることができますか?
PsここのSOの投稿でサンプルテーブルデータをフォーマットする方法に関する参照を見つけようとしましたが、私は盲目であるか、特定の参照がありません。きれいにフォーマットされたテーブル データの例を見たので、それが可能であることを知っているので、それに関する追加の手がかりも非常に高く評価されます。
UPDATE INNERの代わりにLEFT JOINを使用して、出力を得ることができました。私は MySQL の専門家ではないので、結果が正しければ手で数えます。