首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从给定日期开始周数

从给定日期开始周数
EN

Stack Overflow用户
提问于 2021-10-05 20:31:44
回答 2查看 68关注 0票数 0

假设我们有一个存储客户数据的表。考虑到每周包含7天,我渴望能够分别在每个客户的之后的第二天从1开始计算create_date周数。之后,将cust_purchase_date存储在适当的week_number中。

每个客户的周数细分应该是不同的

代码语言:javascript
复制
 cust_id       create_date      cust_purchase_date     purchase_amount  
  111          7/5/2021            7/6/2021              85.00      
  111          7/5/2021            7/8/2021              25.00      
  111          7/5/2021            7/15/2021             35.00      
  111          7/5/2021            7/25/2021             15.00      
  222          7/9/2021            7/10/2021             10.00      
  222          7/9/2021            7/18/2021             25.00      
  222          7/9/2021            7/25/2021             31.00      
  222          7/9/2021            7/27/2021             41.00      
  333          7/11/2021           7/15/2021             51.00      
  333          7/11/2021           7/21/2021             65.00      
  444          7/15/2021           7/16/2021             100.00     
  444          7/15/2021           7/24/2021             78.00      
  444          7/15/2021           7/30/2021             87.00      
  555          8/20/2021           8/24/2021             71.00      
  555          8/20/2021           8/30/2021             55.00      
  555          8/20/2021           9/3/2021              36.00      
  555          8/20/2021           9/8/2021              25.00      

日期表(模拟):

代码语言:javascript
复制
cust_id  create_date  Wk 1 Start    Wk 1 End     Wk 2 Start   Wk 2 End    Wk 3 Start  Wk 3 End....
 111      7/5/2021     7/6/2021     7/12/2021    7/13/2021    7/19/2021   7/20/2021   7/26/2021...
 222      7/9/2021     7/10/2021    7/16/2021    7/17/2021    7/23/2021   7/24/2021   7/30/2021...
 333      7/11/2021    7/12/2021    7/18/2021    7/19/2021    7/25/2021   7/26/2021   8/1/2021...
 444      7/15/2021    7/16/2021    7/22/2021    7/23/2021    7/29/2021   7/30/2021   8/5/2021...
 555      8/20/2021    8/21/2021    8/27/2021    8/28/2021    9/3/2021    9/4/2021    9/10/2021...

请求:

代码语言:javascript
复制
cust_id       create_date      cust_purchase_date     purchase_amount    week_number            
  111          7/5/2021            7/6/2021              85.00               1
  111          7/5/2021            7/8/2021              25.00               1
  111          7/5/2021            7/15/2021             35.00               2
  111          7/5/2021            7/25/2021             15.00               3
  222          7/9/2021            7/10/2021             10.00               1
  222          7/9/2021            7/18/2021             25.00               2
  222          7/9/2021            7/25/2021             31.00               3
  222          7/9/2021            7/27/2021             41.00               3
  333          7/11/2021           7/15/2021             51.00               1
  333          7/11/2021           7/21/2021             65.00               2
  444          7/15/2021           7/16/2021             100.00              1
  444          7/15/2021           7/24/2021             78.00               2
  444          7/15/2021           7/30/2021             87.00               3
  555          8/20/2021           8/24/2021             71.00               1
  555          8/20/2021           8/30/2021             55.00               2
  555          8/20/2021           9/3/2021              36.00               3
  555          8/20/2021           9/8/2021              25.00               3
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-05 20:38:11

您可以使用

代码语言:javascript
复制
select abs('7/5/2020'::DATE - '7/15/2021'::DATE) / 7 as weeks;
 weeks 
-------
    53

使用abs(),这样日期的顺序就无关紧要了。

票数 2
EN

Stack Overflow用户

发布于 2021-10-06 04:32:15

我不知道您的date_table的用途,但它似乎试图预先确定每个客户的周号,每周有一列。这种方法的问题是要生成几个星期的列?当客户在create_date之后5年(或更多)购买时,会发生什么情况?此外,这是不必要的。Postgres允许日期减法将天数表示为整数。因为你的“一周包含7天”简单的除法给了这个星期。(见演示)。

代码语言:javascript
复制
select cust_id         
     , create_date   
     , purchase_date  
     , amount 
     , (purchase_date - create_date)/7 + 1 week_num
  from customer_purchases;     
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69456932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档