SlamData DATE_PART

时间:2016-08-12 14:12:20

标签: datepart slamdata

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

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

在某些数据库系统中,您可以“SET DATEFIRST 1”来解决此问题但不在此处。

2 个答案:

答案 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的冲突。

根据PostgreSQL docs

  

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

MongoDB有这个:

  

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

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

我怀疑可以从另一个中获取一个,这就是Quasar应该做的事情,我鼓励你写一个github问题报告这个错误:https://github.com/quasar-analytics/quasar/issues

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