1

我在 monetdb 表中有一个时间戳列,我想偶尔按小时分组,偶尔按天或月分组。在 MonetDB 中执行此操作的最佳方法是什么?

在说 postgres 时,您可以执行以下操作:

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

我很欣赏它不会使用索引,但是在 MonetDB 中是否有任何方法可以在不创建包含日、月和年截断值的额外日期列的情况下执行此操作?

谢谢。

4

2 回答 2

0

您可以在分组之前使用 EXTRACT(DAY FROM order_time) 作为子查询的一部分。

于 2014-01-29T10:26:48.510 回答
0

回答可能有点晚了,但以下内容应该适用于截断到日精度:

SELECT CAST(order_time AS DATE) AS order_date, count(*)
FROM orders
GROUP BY order_date;

它通过将时间戳值转换为类型 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;

唯一的缺点是您会将日期分成两列。

于 2016-08-04T19:56:47.530 回答