我在monetdb表中有一个timestamp列,我希望偶尔按小时分组,偶尔按日或按月分组。在MonetDB中执行此操作的最佳方式是什么?
比如说postgres你可以这样做:
select date_trunc('day', order_time), count(*)
from orders
group by date_trunc('day', order_time);
我欣赏不会使用索引,但有没有办法在MonetDB中执行此操作而不创建包含日,月和年截断值的其他日期列?
感谢。
答案 0 :(得分:0)
在分组之前,您可以使用EXTRACT(DAY FROM order_time)作为子查询的一部分。
答案 1 :(得分:0)
答案可能有点迟,但以下内容适用于截断日精度:
SELECT CAST(order_time AS DATE) AS order_date, count(*)
FROM orders
GROUP BY order_date;
它的工作原理是将timestamp值转换为DATE类型,这是一个MonetDB内置类型,而且转换非常快。
它在Postgres中没有date_trunc的灵活性,但是如果你需要按照每年的年度精度,你可以使用稍慢但可用的EXTRACT来获取时间戳的相关部分并按它们分组。对于每月分组,您可以这样做:
SELECT EXTRACT(YEAR FROM order_time) AS y,
EXTRACT(MONTH FROM order_time) AS m,
count(*)
FROM orders GROUP BY y, m;
唯一的缺点是您将日期拆分为两列。