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