【问题标题】:SlamData DATE_PARTSlamData DATE_PART
【发布时间】:2016-08-12 14:12:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: datepart slamdata


    【解决方案1】:

    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 中的错误,我会用我想出的公式更新这个答案。

    【讨论】:

      【解决方案2】:

      您可以使用 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)
      

      这会将星期日转移到一周的最后一天。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-28
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多