sql - 如何查询今天前60天的记录
问题描述
我有一个场景,我需要在 2020 年 12 月 1 日识别唯一的销售人员。在此日期确定的那些人中,有多少销售人员在过去 60 天内销售过产品。
对 12/2/20 重复相同的过程,在这些销售人员中,有多少销售人员在 2020 年 12 月 2 日之前的前 60 天内销售过产品。依此类推,直到 21 年 3 月 31 日。我能够在一个日期或特定日期完成。SQL服务器中是否有一个while循环或类似的东西可以解决这个任务?
例子:
person sold on Prior 60 days Period (10/2/20 - 11/30/20)
Nancy 12/1/2020 Nancy
Henry 12/1/2020
Rany 12/1/2020 Rany
person sold on Prior 60 days Period (10/3/20 - 12/01/20)
Tom 12/2/2020
Mar 12/2/2020 Mar
Young 12/2/2020 Young
一日查询示例。这是非常乏味的。
SELECT distinct
CONVERT(VARCHAR(10),date,101) AS date,
Person_id
into #test
FROM person
WHERE date >='12/1/20'
AND date <'12/2/20'
Select count (distinct a.Person_id) as ct
from #test a inner join person b
on Person_id= Person_id
and b.date>='10/2/20'
and b.date < '12/1/20'
解决方案
一种方法是使用日期列表,例如相关子查询。构造日期的一种简单方法(如果您没有日期表)是递归 CTE:
with dates as (
select convert(date, '2020-12-01') as dte
union all
select dateadd(day, 1, dte)
from dates
)
select d.dte,
(select count(distinct s.person)
from sales s
where s.sold_on <= d.dte and
s.sold_on > dateadd(day, -60, d.dte)
) as cnt_sales_persons
from dates d
group by d.dte
option (maxrecursion 0);
推荐阅读
- ios - xcode 构建失败:“_RCTSetLogFunction”,引用自:AppTests.o 中的 -[AppTests testRendersWelcomeScreen]
- scala - Dataframes Join in Scala with multiple columns is not the same with few columns may be null
- r - 根据是否重复行调整列的值 - 迭代 R
- html - XSL:声明变量 & If 语句 & 显示文本
- cakephp - 这是在 CakePhp3 中创建和发布多部分表单数据的正确方法吗?
- jquery - 弹出框手动关闭外部点击:在 Safari 中不起作用
- bash - 在超级账本结构中的脚本中包含瞬态字段
- go - golang中如何将lineprotocol数据推送到influxdb?
- variables - 使用布尔变量替换 if 条件以提高可读性是否更好?
- typescript - 监视传递给模拟节点模块的方法