Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 server 当月和上月购买物品的CustomerID_Sql Server - Fatal编程技术网

Sql server 当月和上月购买物品的CustomerID

Sql server 当月和上月购买物品的CustomerID,sql-server,Sql Server,我在处理此查询时遇到问题。我有一个存储客户id和物品购买日期的表,如下所示(这是我试图获得的结果): 我正在尝试创建一个月报,如果customerID在上个月购买了一些东西,我也希望在其中列出 select CustomerId, PurchaseDate From Orders Where PurchaseDate between '08/01/18' and '08/31/18' --- can't be changed 我试图得到上面的结果,将customerid 1包含在上个月的pu

我在处理此查询时遇到问题。我有一个存储客户id和物品购买日期的表,如下所示(这是我试图获得的结果):

我正在尝试创建一个月报,如果customerID在上个月购买了一些东西,我也希望在其中列出

select CustomerId, PurchaseDate 
From Orders
Where PurchaseDate between '08/01/18' and '08/31/18' --- can't be changed
我试图得到上面的结果,将customerid 1包含在上个月的purchasedate中。我尝试添加以下内容,但我将获得列表

select CustomerId, PurchaseDate 
From Orders
Where PurchaseDate between '08/01/18' and '08/31/18' --- can't be changed
or PurchaseDate between '07/01/18' and '07/31/18' ---- 
但这将包括上个月购买的客户和物品的列表,即使他们在本月没有购买任何东西。有什么建议吗?我将非常感激。谢谢

您可以使用EXISTS:

select CustomerId, PurchaseDate 
From Orders o
Where PurchaseDate between '08/01/18' and '08/31/18'
 AND EXISTS (select *
             From Orders o1
             Where PurchaseDate between '07/01/18' and '07/31/18'
               and o.CustomerId = o1.CustomerId)
--

编辑:

您应该使用
JOIN
然后:

SELECT o1.CustomerId, o1.PurchaseDate, o2.PurchaseDate
FROM Orders o1
JOIN Orders o2
  ON o1.CustomerId = o2.CustomerId
Where o1.PurchaseDate between '08/01/18' and '08/31/18'
  AND o2.PurchaseDate between '07/01/18' and '07/31/18'

你好,卢卡斯谢谢你的建议,我正试图理解查询的第一部分:“选择1”-这是选择第一条记录吗?@SQLnoob
select 1
只是占位符,例如,它可以是任何
select*
。EXISTS检查行的存在,而不是实际值。感谢Lukasz的解释。我尝试了查询,尽管它选择了purchasedate为2018年8月10日的客户ID 1。是否有一种方法可以显示上个月的购买日期以及本月购买物品的客户?因此,结果将显示CustomerID1 PurchaseDate'08/10/2018'和CustomerID1 PurchaseDate'07/15/2018'@SQLnoob Yes,使用JoinThank Lukasz,我以前也尝试过这个方法,尽管它为我尝试获取以下信息的客户提供了两个购买日期,以便为每个客户复制行。使用purchasedate复制CustomerID1和Customer2的行。(查看以上原始帖子的结果)您使用的是哪种产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加一个“
postgresql
oracle
sqlserver
db2
”,感谢您将其更改为sqlserver
SELECT o1.CustomerId, o1.PurchaseDate, o2.PurchaseDate
FROM Orders o1
JOIN Orders o2
  ON o1.CustomerId = o2.CustomerId
Where o1.PurchaseDate between '08/01/18' and '08/31/18'
  AND o2.PurchaseDate between '07/01/18' and '07/31/18'