假设我们有下表,其中的列如下所示:
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周的计数输出。
答案 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个完整的数据。
您已经决定使用周的规范定义,因此这很有意义。另外,您也可以定义从星期几开始的一周的定义。