Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从日期之间的表中选择并计数重复项_Sql_Ms Access - Fatal编程技术网

Sql 从日期之间的表中选择并计数重复项

Sql 从日期之间的表中选择并计数重复项,sql,ms-access,Sql,Ms Access,我有一张名为tblOrders的桌子 我想从2015年3月6日至2015年3月6日之间的tblOrders中选择 然后数一数我有多少回头客 选择日期介于2015年3月6日和2015年3月25日之间 然后通过电子邮件检查这些记录是否存在于所有tblOrders中并计数 这应该提供计数2,因为在之前订购的日期之间有2个客户 如何通过一个SQL查询实现这一点 我正在使用Access数据库和ASP classic 我现在的代码是 ReturnCustomers = 0 Set rs = Server.

我有一张名为tblOrders的桌子

我想从2015年3月6日至2015年3月6日之间的tblOrders中选择 然后数一数我有多少回头客

选择日期介于2015年3月6日和2015年3月25日之间

然后通过电子邮件检查这些记录是否存在于所有tblOrders中并计数 这应该提供计数2,因为在之前订购的日期之间有2个客户

如何通过一个SQL查询实现这一点

我正在使用Access数据库和ASP classic

我现在的代码是

ReturnCustomers = 0
 Set rs = Server.CreateObject("ADODB.Recordset")
 SQL = ("select ID,Email,OrderDate from tblOrders Where OrderDate between #"&date1&"# and "&date2&";")
 rs.Open SQL,Cnn,3,1
 Do while Not rs.EOF

  Set rsCount = Server.CreateObject("ADODB.Recordset")
  SQL = ("select ID from tblOrders Where Email='"&rs("Email")&"' and Not ID="&rs("ID")&";")
  rsCount.Open SQL,Cnn,3,1
  IF Not rsCount.EOF Then
   ReturnCustomers = ReturnCustomers+1
  End IF
  rsCount.Close
  Set rsCount = Nothing

 rs.MoveNext
 Loop
 rs.Close
 Set rs = Nothing
 response.write ReturnCustomers

如何在1个SQL查询中执行此操作?

您不是在寻找重复项。如果您想了解谁在2015年3月6日至2015年3月6日之间订购,谁在2015年3月6日之前订购,您的查询如下:

 select distinct name, email from tblorders o
 where date >=#06/03/2015# and date < #06/25/03/2015#
 and exists (select * from tblorders p where p.email = o.email
     and p.date <#06/03/2015# )

另外,请指定您的sql系统

似乎你想要回头客——那些在目标日期范围内购买并且在该日期范围开始前某个时间购买的客户

首先创建一个查询以检索这些唯一的客户:

选择DISTINCT o1.email 从…起 tblOrders AS o1 内部连接两个领主作为o2 在o1.email=o2.email上 哪里 o1.2015-6-3和2015-6-25之间的日期 日期<2015年6月3日; 然而,您实际上只需要这些客户的数量。因此,您可以将第一个查询用作子查询,并从中导出计数:

选择Countsub.email作为CountOfemail 从…起 选择DISTINCT o1.email 从…起 tblOrders AS o1 内部连接两个领主作为o2 在o1.email=o2.email上 哪里 o1.2015-6-3和2015-6-25之间的日期 日期<2015年6月3日 作为分包商;
嗨,谢谢。我试试这个。我编辑我的帖子-我正在使用access数据库和asp classic。它也适用吗?我认为ms access支持是存在的,但我对此不熟悉。如果它不起作用,发布你的代码,我相信熟悉MS Access的人会来帮忙。我已经尝试过这个,它不起作用。。我将用我当前的代码编辑我的帖子,这可能会帮助别人理解我的需要。。谢谢您的帮助。您需要将列名更改为您的列名。
ReturnCustomers = 0
 Set rs = Server.CreateObject("ADODB.Recordset")
 SQL = ("select ID,Email,OrderDate from tblOrders Where OrderDate between #"&date1&"# and "&date2&";")
 rs.Open SQL,Cnn,3,1
 Do while Not rs.EOF

  Set rsCount = Server.CreateObject("ADODB.Recordset")
  SQL = ("select ID from tblOrders Where Email='"&rs("Email")&"' and Not ID="&rs("ID")&";")
  rsCount.Open SQL,Cnn,3,1
  IF Not rsCount.EOF Then
   ReturnCustomers = ReturnCustomers+1
  End IF
  rsCount.Close
  Set rsCount = Nothing

 rs.MoveNext
 Loop
 rs.Close
 Set rs = Nothing
 response.write ReturnCustomers
 select distinct name, email from tblorders o
 where date >=#06/03/2015# and date < #06/25/03/2015#
 and exists (select * from tblorders p where p.email = o.email
     and p.date <#06/03/2015# )