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

时间:2015-03-06 03:42:05

标签: sql sql-server sql-server-2012

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

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

我需要根据购买情况显示退货商品。

这是向我展示过去30天内购买的所有商家,这些商家也是在30天前购买的。

2 个答案:

答案 0 :(得分:1)

这是你可以采取的两种方法 -

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)

答案 1 :(得分:1)

使用SELF JOIN

记录

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