查询一个范围内同时也在另一个范围内的数据
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())
我想要的很简单,但我想知道编写查询的最佳方式是什么。
例如,我有一个商家列表,我有一个购买记录。
我需要根据购买情况显示回头客。
显示在过去 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())