有没有办法告诉 SlamData 一周从星期一开始(就像在德国一样)?
想要GROUP BY DATE_PART("week", c.createdAt)
哪个总是错误的,因为 SlamData 的一周比我们的早一天开始。
在某些数据库系统中,您可以使用 " SET DATEFIRST 1
" 来解决这个问题,但这里不行。
似乎 SQL 对“一年中的一周”的定义与 MongoDB 的定义发生了冲突。
根据定义,ISO 周从星期一开始,一年的第一周包含当年的 1 月 4 日。
而MongoDB有这个:
周从星期日开始,第 1 周从一年中的第一个星期日开始……这种行为与 strftime 标准库函数的“%U”运算符相同。
Quasar(SlamData 背后的查询引擎)在这种情况下直接使用 MongoDB 运算符,所以这就是您将看到的行为。
我怀疑有可能从另一个得到一个,这是 Quasar 应该做的,我鼓励你写一个 github 问题报告这个错误:https ://github.com/quasar-analytics/quasar/issues 。
也应该可以在 SQL 中表达相同的修复作为一种解决方法,但它不太可能是漂亮的。如果我最终修复了 Quasar 中的错误,我会用我想出的公式更新这个答案。
您可以使用 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)
这将把周日转移到一周的最后一天。