1

有没有办法告诉 SlamData 一周从星期一开始(就像在德国一样)?

想要GROUP BY DATE_PART("week", c.createdAt)哪个总是错误的,因为 SlamData 的一周比我们的早一天开始。

在某些数据库系统中,您可以使用 " SET DATEFIRST 1" 来解决这个问题,但这里不行。

4

2 回答 2

0

似乎 SQL 对“一年中的一周”的定义与 MongoDB 的定义发生了冲突。

根据PostgreSQL 文档

根据定义,ISO 周从星期一开始,一年的第一周包含当年的 1 月 4 日。

MongoDB有这个:

周从星期日开始,第 1 周从一年中的第一个星期日开始……这种行为与 strftime 标准库函数的“%U”运算符相同。

Quasar(SlamData 背后的查询引擎)在这种情况下直接使用 MongoDB 运算符,所以这就是您将看到的行为。

我怀疑有可能从另一个得到一个,这是 Quasar 应该做的,我鼓励你写一个 github 问题报告这个错误:https ://github.com/quasar-analytics/quasar/issues 。

也应该可以在 SQL 中表达相同的修复作为一种解决方法,但它不太可能是漂亮的。如果最终修复了 Quasar 中的错误,我会用我想出的公式更新这个答案。

于 2016-08-24T21:32:30.830 回答
0

您可以使用 SQL CASE 表达式来实现您想要的效果:

GROUP BY 
  (CASE DATE_PART("week", c.createdAt)
    WHEN 1 THEN 7
    WHEN 2 THEN 1
    WHEN 3 THEN 2
    WHEN 4 THEN 3
    WHEN 5 THEN 4
    WHEN 6 THEN 5
    WHEN 7 THEN 6
  END)

这将把周日转移到一周的最后一天。

于 2016-08-12T15:30:21.810 回答