在日期期间每周插入行

时间:2018-03-19 09:35:31

标签: mysql sql

我有一张非常大的桌子:user_id, started_at, ends_at, group_id

我需要对此进行一些分析,所以我试图预先计算一些值,在这个特定的情况下我想创建一个像这样的表: active_in_week with id, user_id, active_week其中active_week是started_atends_at之间的每周

因此,对于started_at 2017-01-01和ends_at 2017-01-31的行,结果将为4行:

id user_id, active_week
1, 1, 1
2, 1, 2
3, 1, 3
4, 1, 4

由于此表的大小/速度,我宁愿在查询级别而不是编程语言上执行此操作。目的是在每周聚合值之后再进行其他查询。

现在如果我在标准化状态下执行这些查询,它们会使用适当的索引运行最多8小时。

1 个答案:

答案 0 :(得分:1)

你可能会像这样在外面工作(attn:它有点棘手):

CREATE TABLE weeks AS (
   SELECT weekId, MIN(date) as starts_at, MAX(date) as ends_at
   FROM (
      SELECT 
        YEARWEEK(started_at) AS weekId,
        started_at AS date,
      FROM srctable
      UNION
      SELECT 
        YEARWEEK(ends_at) AS weekId,
        ends_at AS date,
      FROM srctable

   )
   GROUP BY weekId          
)

然后你应该有一个知道你数据的所有周,开始和结束日期的表。

您可以在周表上进行加入。