查询一个范围内同时也在另一个范围内的数据

Query data within a range that are also within another range

我想要的很简单,但我想知道编写查询的最佳方式是什么。

例如,我有一个商家列表,我有一个购买记录。

我需要根据购买情况显示回头客。

显示在过去 30 天内购买过且在 30 天前购买过的所有企业。

您可以采用以下 2 种方法 -

intersect

select business_id
  from purchases
 where purchase_date >= dateadd(day, -30, getdate())
intersect
select business_id
  from purchases
 where purchase_date < dateadd(day, -30, getdate())

exists 子查询

select distinct business_id
  from purchases x
 where purchase_date >= dateadd(day, -30, getdate())
   and exists (select 1
          from purchases y
         where y.purchase_date < dateadd(day, -30, getdate())
           and y.business_id = x.business_id)

使用SELF JOIN

Table 日志

business_id purchase_date ...

SELECT COUNT (DISTINCT l1.business_id)
FROM Log l1
JOIN Log l2 ON l1.business_id = l2.business_id 
     AND l1.purchase_date <  DATEADD(day, -30, GETDATE())
     AND l2.purchase_date >= DATEADD(day, -30, GETDATE()) 

SQL Fiddle