gpt4 book ai didi

sql - 在 SQL 查询之间获取多个日期范围并相应地添加数据

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:01 49 4
gpt4 key购买 nike

我需要在完成查询 SELECT * FROM <DB> 后选择特定日期范围.

例如:

var (date string
views int
impressions int)

for query.Next() {
err := query.Scan(&date, &views, &impressions)
// handle the err
// get the range of dates for each month
// add up all the views and impressions in that specific range
}

“日期”变量显然是数据库查询中的所有日期。

日期格式为:2017-10-01 (以10月1日为例)10月300人左右,11月100人左右。

从这里开始,我需要将所有值(观看次数和展示次数)相加,但仅限于每个日期范围。

所以我会得到类似的东西:

2017-10-012017-10-3154印象
2017-10-012017-10-075以印象为例。

知道我是如何解决这个问题的吗?

最佳答案

因此,在这些情况下,最好的办法是使用 map 样式的策略来跟踪。例如,map[date]data 允许您为每个日期保留一个唯一的条目。然而,日期有一个有益的优化,因为它们可以很容易地用整数表示(一年中的第几天),并且选项的数量足够少,不会成为内存问题。这意味着我们可以使用 slice 而不是 map 并获得排序的好处(Go maps 在 for 循环中随机排序),同时仍然像 map 一样使用它。例如:

type Data struct {
// fields
}

const dateFormat = "2006-01-02" // only parse the date

dayStats := make([]Data, 366) // account for leap years

for query.Next() {
var datestr string // can make this a time.Time, if your date format scans properly
var dr Data
if err := query.Scan(datestr, /* other fields */ ); err != nil {
log.Fatal(err)
}

date, err := time.Parse(datestr)
if err != nil {
log.Fatal(err)
}

dayStats[date.YearDay()].someField += dr.someField
dayStats[date.YearDay()].someOtherField += dr.someOtherField
// other fields...
}

现在假设我们要计算 10 月 1 日到 10 月 31 日之间的统计数据:

start := time.Date(2017, time.October, 1, 0, 0, 0, 0, time.UTC)
end := time.Date(2017, time.October, 31, 0, 0, 0, 0, time.UTC)

var total Data
for day := start.YearDay(); day <= end.YearDay(); day++ {
total.someField += dayStats[day].someField
total.someOtherField += dayStats[day].someOtherField
// other fields...
}

关于sql - 在 SQL 查询之间获取多个日期范围并相应地添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47161559/

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