gpt4 book ai didi

mysql - 新年伊始成绩不断

转载 作者:行者123 更新时间:2023-11-29 03:42:59 26 4
gpt4 key购买 nike

您好,我的代码需要一点帮助,它几乎正确,但只有一点小问题。

我的结果有 3 列:

  • entries_per_week 每周获取新条目可能是一个星期 5 个,下一个星期 3 个,下一个星期 8 个,依此类推。
  • total_entries 跟踪每周的总条目数它不断添加“entries_per_week”列。
  • 然后是 6WK_total,它是前 6 周的总和。

所以基本上将 previous_total_entries 的 6 个加起来。我几乎让它工作,但在新的一年开始时,6WK_total 从那一年开始新的,而不是将前一年的条目相加。

这是我的代码:

SELECT a.*
, sum(b.total_entries) 6WK_total
FROM
( SELECT x.*
, SUM(y.entries_per_week) total_entries
FROM
( SELECT YEARWEEK(date_created) week_created
, COUNT(*) entries_per_week
FROM entries
GROUP
BY week_created
) x
JOIN
( SELECT YEARWEEK(date_created) week_created
, COUNT(*) entries_per_week
FROM entries
GROUP
BY week_created
) y
ON y.week_created <= x.week_created

GROUP
BY x.week_created
) a

JOIN
( SELECT x.*
, SUM(y.entries_per_week) total_entries
FROM
( SELECT YEARWEEK(date_created) week_created
, COUNT(*) entries_per_week
FROM entries
GROUP
BY week_created
) x
JOIN
( SELECT YEARWEEK(date_created) week_created
, COUNT(*) entries_per_week
FROM entries
GROUP
BY week_created
) y
ON y.week_created <= x.week_created

GROUP
BY x.week_created
) b
ON b.week_created BETWEEN a.week_created - (6 - 1) AND a.week_created

GROUP
BY week_created;

发生了什么,这里有一些结果,请注意注视 (**) 的结果,我想要的结果在另一个表的下方。它应该像下面的期望结果表一样是 1056 而不是 248

  +--------------+-------+-----------------------+-----------+
| week_created | total | total_entries | 6WK_total |
+--------------+-------+-----------------------+-----------+
| 201149 | 49| 131 | 243 |
| 201150 | 37| 168 | 411 |
| 201151 | 37| 205 | 614 |
| 201152 | 18| 223 | 837 |
**| 201201 | 25| 248 | 248 |**
| 201202 | 33| 281 | 529 |
| 201203 | 66| 347 | 876 |
| 201204 | 70| 417 | 1293|
| 201205 | 61| 478 | 1771|
| 201206 | 88| 566 | 2337|
| 201207 | 72| 638 | 2727|
| 201208 | 72| 710 | 3156|
| 201209 | 67| 777 | 4030|
+--------------+-------+-----------------------+-----------+

想要的结果,请注意 week_create '201206' 6 周总数将是 total_entries 中之前的 6 个结果,因此它将是 566 + 478 + 417 + 347 + 281 + 248 = 2337。

+--------------+-------+-----------------------+-----------+
| week_created | total | total_entries | 6WK_total |
+--------------+-------+-----------------------+-----------+
| 201149 | 49| 131 | 243 |
| 201150 | 37| 168 | 411 |
| 201151 | 37| 205 | 614 |
| 201152 | 18| 223 | 837 |
| 201201 | 25| 248 | 1056|
| 201202 | 33| 281 | 1256|
| 201203 | 66| 347 | 1472|
| 201204 | 70| 417 | 1127|
| 201205 | 61| 478 | 1989|
| 201206 | 88| 566 | 2337|
| 201207 | 72| 638 | 2727|
| 201208 | 72| 710 | 3156|
| 201209 | 67| 777 | 4030|
+--------------+-------+-----------------------+-----------+

谢谢

最佳答案

我不确定我是否遵循了您写的所有内容,但如果是,那么您的问题似乎出在您用来提取星期的 YEARWEEK 函数中。

这是您上面的示例中发生的情况。当 YEARWEEK 函数应用于 2012 年的第一周时,它解析为 '201201',但是当 YEARWEEK 函数应用于 2011 年的最后一周时,它解析为 '201153'。由于一年没有 100 周,查询末尾的 between 子句在年初会失败,因为上个月是 201153 而不是 201199。

如果您将添加周的字段保留为日期格式并且仅在外部查询中应用 YEARWEEK 函数,则可以使用 DATE_SUB() 函数为您进行周减法。这可能类似于 BETWEEN DATE_SUB(week_created, INTERVAL 5 WEEK) AND week_created

关于mysql - 新年伊始成绩不断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com