1

うまくいけば、これは簡単なものです。送信済みメッセージのテーブルと顧客テーブルがあります。顧客に送信された最後のメッセージの日付を取得しようとしていますが、悪夢に悩まされており、何が起きているのかわかりません!!

英語で: 最後の日付が DateX よりも大きく、DateY よりも小さい場合に、顧客が受け取った最後の日付を取得してください。

私のSQLでは:(Msaccess)

SELECT 
  Max(outgoingmessages.outgoingmessagedatetime), 
  outgoingmessages.outgoingmessagecustomerID 
FROM 
  outgoingmessages 
  inner join customers on customers.customerid = 
                          outgoingmessages.outgoingmessagecustomerid 
WHERE  
  (outgoingmessages.outgoingmessagedatetime>#20/Oct/2012# 
  and 
  outgoingmessages.outgoingmessagedatetime < #02/Nov/2012# )
  and 
  outgoingmessages.outgoingmessagecustomerID NOT IN (
    SELECT incomingMessageCustomerID from incomingmessages
  ) 
GROUP BY 
  outgoingmessages.outgoingmessagecustomerID; 

customerid=3205/11 にメッセージが送信されたことは知っていますが、クエリはこれを無視し、彼の古い日付を示しているようです。文字通りcustomerID、最後のメッセージの日付と日付を取得する必要があります。

何か案は?!

================ 更新

「WHERE MAX(outgoingmessagetime) BETWEEN date1 and date2)... と言えれば、このステートメントは機能すると思いますが、MAX の日付は使用できません。おそらくサブクエリが必要ですか?

4

2 に答える 2

0

これはどうですか。最初は顧客テーブルが必要だとは思いませんでしたが、そのテーブルの顧客に一致するレコードのみを表示したい場合があるように見えるので、このアプローチを採用しました:

SELECT A.MaxDT, A.outgoingmessagecustomerID
FROM
(SELECT Max(O.outgoingmessagedatetime) AS MaxDT, O.outgoingmessagecustomerID
FROM outgoingmessages AS O
WHERE O.outgoingmessagedatetime BETWEEN >#10/21/2012# AND Date()-7
AND O.outgoingmessagecustomerID NOT IN (SELECT incomingMessageCustomerID FROM imcomingmessages)
GROUP BY O.outgoingmessagecustomerID) AS A, customers AS C
WHERE A.outgoingmessagecustomerID = C.customerID

これにより、派生テーブルで MAX 計算が実行され、結果が顧客テーブルにリンクされます。

Ps: フィールド名がもっと短いといいのですが ^_^

于 2012-11-09T15:08:11.443 に答える
0

なぜだめですか ... ?

SELECT Top 1 o.outgoingmessagedatetime, o.outgoingmessagecustomerID 
FROM outgoingmessages o
WHERE  o.outgoingmessagedatetime between #2012/10/02# And #2012/11/02#
ORDER BY o.outgoingmessagedatetime Desc

これには、11 月 2 日以降に送信されたメッセージは含まれないことに注意してください。11 月 5 日までのメッセージを含めるには、次のように言います。

WHERE  o.outgoingmessagedatetime between #2012/10/02# And #2012/11/05#

再コメント

SELECT  o.outgoingmessagecustomerID, Max(o.outgoingmessagedatetime)
FROM outgoingmessages o
WHERE  o.outgoingmessagedatetime between #2012/10/02# And #2012/11/02#
AND o.outgoingmessagecustomerID NOT IN (
    SELECT outgoingmessagecustomerID FROM outgoingmessages 
    WHERE outgoingmessagedatetime > #2012/11/02#)
GROUP BY o.outgoingmessagecustomerID 
于 2012-11-09T14:12:45.530 に答える