2016-07-26 7 views
0

私のMySQL-dbには、customercallという2つのテーブルがあります。 2つのフィールドがありMySQL - 過去2時間に電話を受けていないお客様

お客様:ID名前

コールは、フィールドがあります。

id 
customer (NOT NULL FK) 
dateOfCall (NOT NULL DATE) 
timeOfCall (NOT NULL TIME). 

まだ呼び出されていないお客様があります。顧客は複数回呼び出すことができます。

過去2時間以内に電話がかかっていない顧客をすべて取得するにはどうすればよいですか?

スキーマといくつかの最小限のデータとSQLフィドル:(!SQL Serverはフィドルあなたよりも別のタイムゾーンであるかもしれないことに注意してください)http://sqlfiddle.com/#!9/5c80f/1

+1

http://sqlfiddle.com/でスキーマを用意してください。 – motto

+0

@motto:良いアイデアです。私は今質問にSQL Fiddleを含めました。 – Mathias

答えて

1

我々は前回の人に対してチェックする必要があります電話を受けたここに更新されたSQLがあります。

あなたが左外で date_subを使用することができます
Select 
    cust.* 
from 
    `customer` cust 
left join 
(
    select 
    customer 
    from `call` cl 
    group by customer 
    having 
    max(STR_TO_DATE(CONCAT(cl.dateOfCall, ' ', cl.timeOfCall), '%Y-%m-%d %H:%i:%s')) >= date_sub(NOW(), interval 2 hour) 
) aa on cust.id = aa.customer 
where aa.customer is null 
+0

はい、電話をしたことがないお客様も欲しいです。私は最後の2時間に電話をしていないすべての顧客を欲しい。 – Mathias

+0

がクエリを変更しました。 – Neeraj

+0

テーブルコールに名前を付けるのは私の愚かでした。あなたはあなたのクエリ(\ 'call \')でそれをエスケープしてキーワードとして取られませんか? – Mathias

1
SELECT * FROM customer 
WHERE id NOT IN (
    SELECT DISTINCT customer FROM `call` 
    WHERE timeOfCall NOT BETWEEN 
    SUBTIME(curtime() , '02:00:00') AND curtime()); 
0

参加:

SELECT * 
FROM `customer` as cu 
LEFT OUTER JOIN 
(
SELECT * FROM `call` WHERE 
call.dateOfCall >= DATE_FORMAT(DATE_SUB(CURTIME(), INTERVAL 2 HOUR),'%Y-%m-%d') 
AND 
(call.timeOfCall > DATE_SUB(CURTIME(), INTERVAL 2 HOUR)) 
) as ca 
    ON (ca.customer = cu.id) 
    WHERE ca.customer IS NULL; 

fiddle

編集:DATE_SUBでDATE_ADD置き換えられます。混乱の必要はありません。

+0

何か問題があるようです。私はクエリを実行すると、答えとしてMesutだけを返し、MehtapとMaksymではそれを逃してしまいます。 (試したところ22:21 26.7.16) – Mathias

+0

これは有望そうで、結果セットは正しいです。あなたのクエリで私が理解できないもの: 'WHERE call.customer IS NULL' - > call.customerはNOT NULLフィールドです。 'call.dateOfCall これは何ですか? @Motto: – Mathias

+0

サンプルデータを変更して、cu#9が最後の2時間以内に呼び出されたので、結果セットには表示しないでください。http://sqlfiddle.com/#!9/bdf006/ 1 はい、なぜcall.customerがNULLであるかチェックしていますか?そのフィールドはNULLになることはありません。 @Motto – Mathias

関連する問題