1

希望这是一个简单的。我有一个已发送消息表和一个客户表。我正在尝试获取发送给客户的最后一条消息的日期,但我正在做噩梦,无法弄清楚发生了什么!

In Chinese:获取客户收到的最后日期,其中最后日期大于 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=32在 05/11 发送了一条消息,但查询似乎忽略了这一点并显示了他的旧日期。我实际上只需要获取customerID他们最后一条消息的日期和日期。

有任何想法吗?!

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

我认为如果我可以说“WHERE MAX(outgoingmessagetime) BETWEEN date1 and date2)...但我不能使用 MAX 日期,该语句会起作用。也许我需要一个子查询?

4

2 回答 2

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 回答
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 回答