MonetDB:按时间戳的不同部分分组

时间:2013-12-20 14:45:06

标签: monetdb

我在monetdb表中有一个timestamp列,我希望偶尔按小时分组,偶尔按日或按月分组。在MonetDB中执行此操作的最佳方式是什么?

比如说postgres你可以这样做:

select date_trunc('day', order_time), count(*)
    from orders
    group by date_trunc('day', order_time);

我欣赏不会使用索引,但有没有办法在MonetDB中执行此操作而不创建包含日,月和年截断值的其他日期列?

感谢。

2 个答案:

答案 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;

唯一的缺点是您将日期拆分为两列。