gpt4 book ai didi

mysql - 按 X 天分组

转载 作者:行者123 更新时间:2023-11-30 23:40:42 26 4
gpt4 key购买 nike

我有一个数据库,显示不同事件的不同统计数据,每一行都有一个时间戳值名称“date”。

我编写了用于选择和汇总日期范围的代码,例如:21-24/07/2010。现在我需要添加一个选项来选择日期范围,而且还要对每 X 天的统计数据进行分组。

假设用户选择查看整个月份的统计信息:01/07-31/07。我想向他展示按 X 天分组的统计数据,假设是 3 天,这样他就会看到 01-03/07、04-06/07、07-09/07 等等的统计数据...

我几乎用这段代码做到了:

SELECT t1.camp_id,from_days( floor( to_days( date ) /3 ) *3 ) AS 'first_date'
FROM facebook_stats t1
INNER JOIN facebook_to_campaigns t2 ON t1.camp_id = t2.facebook_camp_id
WHERE date
BETWEEN 20100717000000
AND 20100724235959
GROUP BY from_days( floor( to_days( date ) /3 ) *3 ) , t2.camp_id

它实际上确实将它分组(按 3 天),但问题是由于某种原因它从 16/07 开始,而不是 17/07,然后每次分组 3 天一次。

很想听听代码的解决方案,或者我给出了您想到的更好的解决方案。

最佳答案

To_Days 返回自 0 年以来的天数。当您将它除以 3 时,它只考虑商而不考虑余数。例如。如果从 0 年开始已经过了 5 天,那么 to_days 将返回 1。

To_days(20100717000000) 必须保留 1 的余数。基本上 To_days(20100716000000) 可以被 3 整除,但 17 不能。

你可以试试这个查询:

DECLARE @startDate datetime
DECLARE @endDate datetime
DECLARE @groupByInterval INT
SET @startdate = 20100717000000
SET @enddate = 20100724235959
SET @groupByInterval = 3

SELECT
t1.camp_id, from_days(
to_days(@startDate)+floor(
(to_days(date)-to_days(@startDate))/@groupByInterval
)
* @groupByInterval)
AS first_date
FROM facebook_stats t1
INNER JOIN facebook_to_campaigns t2 ON t1.camp_id = t2.facebook_camp_id
WHERE date
BETWEEN @startDate
AND @endDate
GROUP BY first_date , t2.camp_id

关于mysql - 按 X 天分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325026/

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