最近12周内每周的游乐次数

时间:2019-04-21 07:37:33

标签: sql postgresql

假设我们有下表,其中的列如下所示:

Rides
    ride_id
    start_time
    end_time
    passenger_id
    driver_id
    ride_region      
    is_completed (Y/N)

Drivers
    driver_id
    onboarding_time
    home_region

写一个查询,我们可以用来创建过去12周中每周在旧金山地区完成的游乐设施总数的图。

我已经使用datepart来获取每周的计数。但是我不确定如何包含从TODAY开始持续12周输出的子句。我的代码将从最早的开始时间算起1到12周的时间。 请检查我的代码并纠正我。

    SELECT datepart(week, START_TIME), COUNT(RIDE_ID)
    FROM RIDES
    WHERE is completed = 'Y' AND ride_region ='San Francisco' AND 
    datepart(week, START_TIME) <= 12
    group by `datepart(week, START_TIME)`;

我希望根据周计算过去12周的计数输出。

3 个答案:

答案 0 :(得分:1)

代替:

AND datepart(week, START_TIME) <= 12

使用此

AND START_TIME > current_date - interval '84 day'

因为您希望过去12周中的所有行= 84天
group by datepart(week, START_TIME)

答案 1 :(得分:1)

如果您希望从当前日期起过去12周

SELECT datepart(week, START_TIME), COUNT(RIDE_ID)
FROM RIDES
WHERE is completed = 'Y' 
AND ride_region ='San Francisco' 
AND datepart(week, START_TIME) between (date_trunc('week', current_date) -12) 
      AND date_trunc('week', current_date) 
group by datepart(week, START_TIME);

答案 2 :(得分:0)

这有点复杂,因为您可能不希望部分时间。因此,减去12周(或84天)可能还不够。

我会建议更像这样的逻辑:

where start_time >= date_trunc('week', curdate()) - interval '12 week') and
      start_time < date_trunc('week', curdate())

这将根据日历周提供最近12个完整的数据。

您已经决定使用周的规范定义,因此这很有意义。另外,您也可以定义从星期几开始的一周的定义。